【问题标题】:Undo git fast forward merge撤消 git 快进合并
【发布时间】:2013-06-07 03:18:45
【问题描述】:

我有这种情况: 在一些 testBranch 上工作了一段时间,我想与 master 同步,所以我做了 git checkout testBranch 和 git 合并主/testBranch

所以现在我的分支已与 master 同步,但后来我发现我想撤消该合并,问题是合并是通过快进完成的,现在我的提交历史记录与 master 提交和 testBranch 提交混合,而我没有在我的 testBranch 上合并之前不知道如何恢复到状态。

感谢您的帮助

【问题讨论】:

  • 提交是从位于 testBranch顶端master/testBranch 合并的,还是您已经设法在已完成的内容之上记录了几个自己的本地提交合并?恢复的方式很大程度上取决于此。
  • 您对我的回答不满意有什么原因吗?

标签: git git-merge fast-forward


【解决方案1】:

git reflog show testBranch

应该将快进合并显示为最后一项 ({0})。 在确定是这种情况后,结帐testBranch 然后就可以了

git reset --keep testBranch@{1}

恢复到之前的状态。

【讨论】:

  • 这是一个很好的答案。我要补充一点,确保在运行 git reset 之前检查 testBranch 很重要
  • 一种易于理解且不错的方法!这应该被标记为答案
【解决方案2】:

如果您知道要在其中使用本地 testBranch 的修订版,则很简单:

git checkout testBranch
git reset --hard <revision>

如果您有类似的更改(最旧的在顶部):

<point>
<your_change_a>
<change_from_someone_else>
<your_change_b>
<testBranch>

你可以:

git checkout testBranch
git reset --hard <point>
git cherry-pick <your_change_a>
git cherry-pick <your_change_b>

【讨论】:

  • 这应该可以。我还建议使用 Git 图形查看器,例如 gitg 或 gitk 来全面了解您想要撤消的更改。
  • 感谢您的回答,但我找到了另一种解决方案(我没有尝试过您的解决方案,但我想它可以工作)。解决方案在此博客中找到:blog.tplus1.com/blog/2011/09/23/undo-a-fast-forward-git-merge ...希望它可以帮助其他人:) ...
猜你喜欢
  • 1970-01-01
  • 2016-02-04
  • 2016-06-02
  • 2019-08-29
  • 2013-09-12
  • 2020-08-23
  • 2011-08-22
  • 2014-10-27
  • 2021-06-26
相关资源
最近更新 更多