【发布时间】:2012-02-06 13:47:19
【问题描述】:
我们正在从 SVN 迁移,并且还合并了一堆分支。为了大大简化,我们有一个很久以前分叉的分支 B,并且有一点开发,比如说修改了数百个文件中的 8 个文件。同时,master也发生了巨大的变化:
A
|
X---(a few changes)--- B
|
|(hundreds of changes)
|
HEAD/master
如果我从分支执行“git merge master”,则会显示许多合并冲突,因为 B 和 HEAD 现在非常不同。但这似乎(天真地,对我来说)是错误的:B 离后备箱不远,只是回到了很长一段时间。
有没有办法利用这个事实?我是否应该尝试先将 B 合并回 X,然后从那里合并到 HEAD?什么是命令:
- 标识修订版 X
- 查看 B 和 X 之间的差异
- 将 B 与 X 合并
- 从新的合并版本更新到 HEAD
人们在这些情况下使用的另一种方法吗?
(很可能我在前面说了一些非常愚蠢和不像 git 的东西 - 请随时指出它们。:))
【问题讨论】:
-
您是否尝试过在两个分支之间创建补丁并将其应用于您当前的头部。
-
你的意思是X和B之间?这听起来像我想要做的。你能指点我正确的命令吗?
-
取决于最适合你的几个例子可能是 git diff X..HEAD foo.cc > foo.patch 或 git diff X..HEAD > all.patch
-
回答“1”。只需通过“git log”向后阅读即可。
-
@Adrian,看起来这行得通。我注意到一个缺点是当您应用补丁时,您将无法访问像 mergetool 这样的工具 - 有时补丁会失败。