【问题标题】:How to rollback the two previous commits?如何回滚之前的两个提交?
【发布时间】:2011-06-13 08:53:48
【问题描述】:

考虑这种情况:

  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

【问题讨论】:

  • git reset HEAD~2 应该重置为 #n+1 提交,如果你当时已经拉了 B 次提交。你拉他们了吗?
  • ...不是在 #n+2 提交之前。它是:[0] B 推 commit #n+1, [1] A committed #n+2, [2] 不成功 push, [3] pull, [4] push .所以现在在 github 上有一个提交 (#n+2) 和一个合并分支“master”(#n+3)。
  • 如果你已经发布了提交,你不应该使用reset来回滚它。 (如果你不知道的其他开发人员拉了,这将导致痛苦。)相反,使用 revert 并进行新的提交,将你带到你想要的状态。切勿更改已发布的历史记录。见book.git-scm.com/…

标签: git github reset


【解决方案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 &lt;commit_hash&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 2023-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多