我有一个Git分支,它是一个显示项目topic
的{{1}}分支。我将它与主服务器合并,并手动解决了冲突。之后,master
修复了一个关键错误,我再次合并,这次没有冲突。我没有在两个合并之间做任何事情,我没有把分支推到其他任何人。我想结合两个合并。
我现在拥有的是:
master
其中:
我想把它变成:
master ----A---B-----C---------->
\ \
topic ---W-----X-----Y-------->
其中X'现在是在单个合并提交中合并冲突解决方案和错误修复的合并。
我知道我可以通过检查W并合并master ----A---B---C----------->
\
topic ----W---------X'-------->
并在不可避免的冲突期间从X复制已解析文件的内容来手动执行此操作。是否有更快的方法可以减少搞乱的可能性(在冲突大而丑的情况下)?
答案 0 :(得分:1)
更快?
git checkout topic
git rebase -i W
然后你可以压缩最后两次提交。
git merge -ours master
(再次记录master
和topic
之间的合并,而不必“重做”合并)
您还可以尝试使用-p
(--preserve-merge
)选项,以保留主和主题之间的合并链接
git rebase -p -i W
答案 1 :(得分:1)
如果你真的没有推过任何东西,至少W
,那么这可能是最简单的方法(在实际的冲突解决之外 - 这可能是痛苦的,我猜)来实现它:
git checkout topic
git reset --hard W
git merge master
如果您从W
开始推送,(特别是如果X
或Y
存在于您的存储库之外的任何地方),我不确定是否有一个干净的解决方案 - 无论您做什么,都会对其中包含X
或Y
的任何其他存储库造成问题。
当然,除非您启用了rerere
,否则您必须重新进行冲突解决。
答案 2 :(得分:0)
很确定你可以在这里做git rebase origin/master
..
另一点是分支机构很便宜。为什么不创建一个单独的克隆你的topic
说topic'
,然后操纵他,最后你可以在它和topic
之间做一个差异来证明你自己没有改变了任何东西(只提交历史记录已经改变)