Как "повторно открыть" последнюю фиксацию 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 теперь увидит ваши измененные файлы как измененные, но не зафиксированные.