Как "повторно открыть" последнюю фиксацию git?

Я работал над веткой и мне нужно было вернуться к мастеру для быстрого исправления, поэтому я совершил свою работу.

Теперь я вернулся в свою ветку, и я хотел бы вернуться к состоянию, в котором я не совершал, но все мои изменения применяются и готовы к совершению (т.е. отменить предыдущую фиксацию, но мои изменения не будут потеряны и они показаны в git status).

Изменение предыдущей фиксации для меня недостаточно, так как я хочу видеть измененные файлы и строки (это упрощает работу с моим изменением).

Я знаю, что git stash было бы лучшим решением, но слишком поздно. Я также склонен смешивать (или освобождать) мои зафиксированные коммиты, поскольку они не связаны с веткой.

Ответ 1

В основном есть два способа решить эту проблему:

  • Сделайте reset (на ветке master или в какой-либо ветке выполняется ложная фиксация):

    git reset --soft HEAD~1
    

    HEAD~1 - относительный адрес, как описано здесь.

  • Продолжайте работать и выполняйте поправку:

    git commit --amend
    

    В этом случае вы притворяетесь, что ничего не произошло, продолжайте работать в своей ветке и вызовите команду, когда вы планируете совершить реальную фиксацию. Вы как бы перезаписываете последнее коммит со всеми изменениями и (необязательно) новое сообщение.

И проформа: это действительно, как вы сами упоминаете, - лучше выполнить git stash, только говоря людям, которые видят этот ответ случайно, и считают, что это обычная практика (это не так).

Ответ 2

По моему мнению, вы хотите отменить последнюю фиксацию в своей ветке, сохраняя все изменения с фиксацией целой и поставленной.

Вы можете попробовать использовать команду git reset, как показано ниже:

git reset --soft HEAD^

Это должно взять ваш последний фиксатор и отменить его, сохранив все изменения.

Ответ 3

Вы должны использовать git reset HEAD~1 (без опции --hard)

Он будет делать именно то, что вы хотите, и HEAD ~ 1 означает здесь, что вы хотите reset совершить одно, считая из головы (верхней) истории.

Это не коснется каких-либо файлов в файловой системе, поэтому git теперь увидит ваши измененные файлы как измененные, но не зафиксированные.