如何回滚之前的两个提交?
Posted
技术标签:
【中文标题】如何回滚之前的两个提交?【英文标题】:How to rollback the two previous commits? 【发布时间】:2011-06-13 08:53:48 【问题描述】:考虑这种情况:
-
开发者 A 提交:#n
开发。 B 确实提交了 #n+1
开发。 A 确实提交了 #n+2
并提交 #n+3
然后发现在他的提交 #n+2 中他引入了一个缺陷。
如何开发。回滚他的最后 2 次提交并继续开发提交 #n+1?
试过git reset --hard HEAD~2
*,但它又回到了开发者A的提交#n。
【问题讨论】:
git reset HEAD~2 应该重置为 #n+1 提交,如果你当时已经拉了 B 次提交。你拉他们了吗? ...不是在 #n+2 提交之前。它是:[0] B 推commit
#n+1, [1] A commit
ted #n+2, [2] 不成功 push
, [3] pull
, [4] push
.所以现在在 github 上有一个提交 (#n+2) 和一个合并分支“master”(#n+3)。
如果你已经发布了提交,你不应该使用reset来回滚它。 (如果你不知道的其他开发人员拉了,这将导致痛苦。)相反,使用 revert 并进行新的提交,将你带到你想要的状态。切勿更改已发布的历史记录。见book.git-scm.com/…
How to undo last commit(s) in Git?的可能重复
【参考方案1】:
它应该回到 n+1 提交。您可能在那里也有一个合并提交。你也可以git reset --hard <sha1_of_where_you_want_to_be>
警告!!
--hard
表示您当前拥有的任何未提交的更改 将被永久丢弃。
【讨论】:
如何获得远程提交的 sha1(不是我做的)?我尝试使用git reflog
,但我只能访问我的本地 reflog 信息,例如,提交 #n、#n+2、#n+3... 但不能 #n+1
我从git log
得到了我想要的sha1,但还需要git push -f
,所以修改会反映在github上。
是的,但我不知道你也想更新遥控器 :)
警告!! --hard
表示您当前拥有的任何未提交的更改都将被永久丢弃。要回滚到之前的提交而不丢弃您的工作,请使用--soft
。
请解释使用--hard而不是--soft【参考方案2】:
我建议改用这样的东西:
git reset --soft <commit_hash>
除非您希望它删除该点之前的所有更改,否则在这种情况下使用--hard 而不是--soft,它将带您到达树中所需的点,而不会删除所有更改提交。
当我阅读时,我尝试使用 --HARD 并且不幸的是,它删除了我到那时为止的所有更改。因此,请注意是否要删除它们。
所以,如果你像我一样不走运,试试这个! :git revert <commit_hash>
【讨论】:
以上是关于如何回滚之前的两个提交?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 codeigniter 中的事务进行基于数据更改的提交和回滚?
github上测试服出现bug,如何回滚并获得合并之前的分支