在 Git 中合并两个合并

问题描述 投票:0回答:3

我有一个 Git 分支,它是一个显示项目

topic
的分支
master
。我将它与 master 合并并手动解决了冲突。之后,修复了
master
中的一个严重错误,我再次合并,这次没有冲突。在两次合并之间我自己没有提交任何内容,也没有将分支推送给其他任何人。我想合并这两个合并。

我现在拥有的是:

master ----A---B-----C---------->
                \     \
topic   ---W-----X-----Y-------->

地点:

  • X 是修复了冲突的合并
  • C 是 master 上的关键错误修复
  • Y 是包含此修复的合并

我想把它变成:

master  ----A---B---C----------->
                     \
topic   ----W---------X'-------->

其中 X' 现在是在单个合并提交中合并冲突解决和错误修复的合并。

我知道我可以通过检查 W 并合并

master
来手动完成此操作,并在不可避免的冲突期间从 X 复制已解析文件的内容。有没有一种更快、更不容易搞砸的方法(在冲突很大且丑陋的情况下)?

git version-control git-merge git-rebase
3个回答
1
投票

如果您确实至少从

W
起就没有推动过任何事情,那么这可能是完成它的最简单的方法(除了实际的冲突解决 - 我猜这可能会很痛苦):

git checkout topic
git reset --hard W
git merge master

如果您从

W
开始推送(特别是如果
X
Y
存在于您的存储库之外的任何地方),我不确定是否有一个干净的解决方案 - 无论您做什么,您会给任何其他包含
X
Y
的存储库带来问题。

当然,您必须重新进行冲突解决,除非您启用了

rerere


1
投票

更快?

git checkout topic
git rebase -i W

然后您可以压缩最后两次提交。

git merge -ours master

(再次记录

master
topic
之间的合并,而不必“重做”合并)

您还可以尝试使用

-p
(
--preserve-merge
) 选项,以保留 master 和 topic 之间的合并链接

git rebase -p -i W

0
投票

很确定你可以在这里做

git rebase origin/master
..

还有一点就是分店便宜。为什么不为你的

topic
创建一个单独的克隆,说
topic'
然后操纵他,最后你可以在它和
topic
之间进行比较,以表明你没有改变任何东西(只有提交历史改变了) )

© www.soinside.com 2019 - 2024. All rights reserved.