【问题标题】:Merge old git commit with HEAD at master在 master 处将旧的 git commit 与 HEAD 合并
【发布时间】:2012-08-07 23:28:11
【问题描述】:

我在合并同事的提交时犯了一些错误。现在,我们已经发现了它,我们需要再次应用旧提交,以手动选择文件中的更改。情况如下:

A--\       /--F--\
    C--D--E       H--I
B--/^      \--G--/   ^
    |                |
WRONG MERGE       MASTER

我需要 git 再次要求我将 B 与 I 合并,就像 B 从未出现在历史上一样。换句话说,我需要 git 要求我为 B 和我提交的所有不同文件选择合并。做这种事情的最佳方法是什么?我可以用樱桃采摘来做到这一点吗?怎么样?

【问题讨论】:

  • git cherry-pick SHA1 就足够了
  • cherry pick 告诉我 B 是合并,当我指定父级时,它最终没有任何其他操作。也许只是我不了解樱桃采摘的本质。

标签: git revision-history git-cherry-pick


【解决方案1】:

你可以使用提交复制技巧:

# make a branch named B started on the commit B
git checkout -b B <sha1 id of the commit B> 
# it creates a branch which starts at a commit
# right before B and has exact copy of commit as B,
# but with a different sha1 id.
git rebase --no-ff HEAD~1

# now we do simple merge
git checkout master
git merge B

它还允许使用提交范围和保留日期、作者、提交消息等来制造技巧。

事实上,documentation 中描述了您的场景:

--no-ff ... 使用新提交重新创建主题分支,以便可以成功重新合并

【讨论】:

    【解决方案2】:

    嗯,我终于这样解决了。我从B 创建了差异(在我的示例中,针对主人,I)并手动应用了 meld difftool 中的所有更改:

    [master]$ yes | git difftool <B hash> -t meld
    

    然后,添加所有更改的文件并提交。

    【讨论】:

    • 这只是差异和补丁。没有太多乐趣。我的回答也是如此,但保留了有关提交的更多信息并记录了更好的历史记录。
    【解决方案3】:

    您可以使用git revert -m 1 &lt;commit&gt; 恢复有问题的合并提交,然后再次使用git merge &lt;B_branch&gt;。这将为您的历史记录添加一个还原提交。否则,您可以使用 git rebase -i 从历史记录中删除 B 的提交。后者对协作工作更具破坏性,因为所有 WIP 和所有协作者现在都必须重置其 master 分支。

    如果您不介意还原提交,我强烈推荐它。这是得到你想要的最简单的方法。但是,如果 D、E、F、G、H 或 I 基于 B 的变更集,则还原可能会变得复杂。

    【讨论】:

    • 嗯,对我来说最重要的是不改变历史。是否有可能“重新申请”旧的提交(B)?我只需要合并工具来询问我如何合并 B 和 I 的不同之处。
    • 如果您恢复该提交的合并,请使用git merge --no-commit &lt;branch&gt; 重新应用它,然后您可以检查差异。当你想提交结果时,你可以使用git commit
    【解决方案4】:

    假设 master 已签出

    git branch temp <sha1 of B>
    

    创建对旧提交的引用。

    git rebase --preserve-merges -i <sha1 of A>
    

    然后取出应该是合并提交的第一行。

    现在你只需要让你的 B 回来

    git merge temp
    

    【讨论】:

      猜你喜欢
      • 2021-03-06
      • 1970-01-01
      • 2016-07-25
      • 2015-11-05
      • 2014-11-14
      • 2017-05-05
      • 1970-01-01
      • 2023-03-16
      • 2011-11-17
      相关资源
      最近更新 更多