“合并”这种情况的正确方法

时间:2012-11-11 21:41:32

标签: git

所以这就是我所拥有的:

o experiments
|
o
|
o
|
o master
|
o
|
o (initial commit)

正如您所看到的,我正在为前三次提交的“master”分支工作。然后我创建了一个新的分支“实验”,朝着不同的方向前进。

现在我正面临这种情况:

  1. 我已经决定我目前的“实验”路径真的是要走的路。
  2. 但是,我删除的旧“主人”中仍然有很多文件和各种文件中的代码片段,但我现在要带回来。
  3. 情况发生了很大变化。例如,工作树的目录结构发生了很大变化。这可能意味着进行常规git合并不适合我。
  4. 我该如何应对这种情况?一个想法就是问这个问题:

    • 我应该如何将旧的“master”签出到另一个目录(当前工作树之外),这样我就可以完全手动完成合并了?

    如果您认为最后一个问题是处理这种情况的适当方法,请回答这个问题。随意提出其他方法。

1 个答案:

答案 0 :(得分:1)

  

该图并未隐藏任何细节。所以,是的,我没有对主人做过任何单独的发展。

在这种情况下,合并尽可能简单。 Git将进行快速合并。这意味着它基本上只是将master分支指针设置为与experiments分支相同的提交。实际上没有其他事情发生。

即使你在master上有点分歧,git也不仅会对两个分支的尖端进行简单的比较,而是实际查看分支中发生的事情(通过找到共同的祖先);这被称为三向合并。所以,它可能会弄清楚你做了什么,你可能不会遇到极端的合并冲突。当然总会有一些例外情况,但在解决合并冲突时你可能很容易解决这些问题。

但同样,由于您的master根本没有分歧,您可以轻松地按照您希望它最终查看的方式准备experiments分支,然后快进master 。或者,如果您希望使历史记录反映出您实际上与master分歧(或至少计划分配)的事实,您还可以使用git merge --no-ff experiments强制进行合并提交。