如何回滚前两次提交?


83

考虑这种情况:

  1. 开发人员A进行了提交:#n
  2. 开发人员 B确实提交了#n + 1
  3. 开发人员 A确实提交了#n + 2
  4. 并提交#n + 3

然后发现在提交#n + 2中,他引入了一个缺陷。

如何开发 回滚他的最后2个提交,并继续在提交#n + 1上开发

尝试过git reset --hard HEAD~2*,但是又回到了开发人员A的提交#n


2
git reset HEAD〜2应该重置为#n + 1 commit,如果那时候你已经撤消了B次提交。你拉他们了吗?
Snowbear 2011年

1
...不在#n + 2提交之前。是:[0] B推commit#n + 1,[1] A committed#n + 2,[2]不成功push,[3] pull,[4] push。因此,在github上现在有一个commit(#n + 2)和一个Merge分支“ master”(#n + 3)。
Marius Butuc

2
如果已经发布了提交,则不应使用reset将其回滚。(如果您不熟悉其他开发人员,这将引起痛苦。)相反,请使用revert并进行新的提交,使您进入所需的状态。切勿更改已发布的历史记录。见book.git-scm.com/...
威廉Pursell

Answers:


122

它应该回到n + 1提交。您可能在那里也有一个合并提交。您也可以git reset --hard <sha1_of_where_you_want_to_be>

警告!!--hard意味着您当前所做的所有未提交的更改将被永久丢弃。


2
我如何获得远程提交的sha1(不是我自己做的)?我尝试使用git reflog,但是我只能访问我的本地reflog信息,例如,提交#n,#n + 2,#n + 3 ...但不能访问#n + 1
Marius Butuc 2011年

13
我从a获得了我想要的sha1 git log,但是git push -f还需要a,因此修改将反映在github上。
Marius Butuc

1
是的,但我不知道您也要更新遥控器:)
Adam Dymitruk 2011年

25
警告!!--hard意味着您当前所做的所有未提交的更改将被永久丢弃。要回滚到上一个提交而不放弃您的工作,请使用--soft
Ken M. Haggerty 2015年

4
请说明--hard而不是--soft的使用
iuridiniz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.