Можно ли отменить прошлую фиксацию, которая долгое время была объединена в ваш репозиторий git с помощью команды git? Или вам нужно вручную отменить все изменения, сделанные в этой фиксации?
Отменить фиксацию git
Ответ 1
Вы всегда можете просто отменить изменения из одной фиксации, выполнив:
git revert <commit-id>
обратите внимание, что это создает новую фиксацию, отменяя только те изменения
например. git log --oneline
d806fc9 two
18cdfa2 bye
62c332e hello
c7811ee initial
Скажем, я хочу вернуть изменения в commit 18cdfa2
:
git revert 18cdfa2
Теперь имеем: git log -1 -p
commit fb9d6627a71636503fc9a1eb4f725937c783ecee
Author: Seth <[email protected](none)>
Date: Wed Oct 3 10:32:46 2012 +0200
Revert "bye"
This reverts commit 18cdfa27c964b66b624be1030250757b745d6866.
diff --git a/a b/a
index 0907563..3b18e51 100644
--- a/a
+++ b/a
@@ -1 +1 @@
-bye world
+hello world
Ответ 2
Вы всегда можете сделать git revert <commit-hash>
, чтобы отменить фиксацию git. Однако это в большинстве случаев не полезно, потому что он создает новую фиксацию, добавляющую ваш git reflog.
То, что я обычно делаю, когда я должен отступить, - это reset моя ветка на более ранний этап. Для этого сделайте git reflog и найдите позицию HEAD, в которую хотите перейти.
[email protected]:~/myrepo$ git reflog -3
8d386b8 [email protected]{0}: commit: I did something I don't want
2a59955 [email protected]{1}: commit: Feedback from PR #792
1023102 [email protected]{2}: checkout: moving from one branch to another
Теперь, скажем, я хочу перейти к фиксации хеша 2a59955
и отменить все изменения в 8d386b8
. Я бы сделал:
Update: git reset --soft [email protected]{1}
Это будет reset моя ветвь в исходное состояние. Выполнение этого не только отменяет все изменения, но также останавливает отслеживание всех файлов, которые вы могли бы добавить в этой фиксации. Во что бы то ни стало, это самый эффективный способ отменить все изменения в одном коммите.
Это приведет к отмене всех ваших изменений. Существует жесткий reset, предназначенный для возврата во времени (по крайней мере, с точки зрения git). Используйте
--hard
вместо--soft
для этого