使用Git,提交
压扁不合并提交。相反,它将记录一个新的提交以及来自其他多个提交的更改。变基类似于,但不合并提交。记录具有与现有提交相同的更改的新提交称为历史重写。但是由于现有提交是不可变的,因此应将其理解为“编写替代历史记录”。
合并尝试合并从共同祖先提交开始的两个提交历史记录(分支)的更改。
因此,让我们看看您的历史记录:
F feature2
/
1---2---3---4---5 feature1 (old)
/
-o---o---o---A---o---o---S master
A是公共祖先,原始要素分支是1-5,新要素分支是F,S是压缩后的提交,其中包含与1-5相同的更改。如您所见,F和S的共同祖先是A。就git而言,S和1-5之间没有任何关系。因此,将master与S一侧合并,将feature2与1–5合并将发生冲突。解决这些冲突并不困难,但这是不必要的,繁琐的工作。
由于这些限制,有两种方法来处理合并/压缩:
您可以使用历史记录重写,在这种情况下,您将获得代表相同更改的多个提交。这样,你会重订的第二个特点分支到压扁的承诺:
F feature2 (old)
/
1---2---3---4---5 feature1 (old)
/
-o---o---o---A---o---o---S master
\
F' feature2
或者您不使用历史记录重写,在这种情况下,您可能会得到额外的合并提交:
F feature2
/
1---2---3---4---5 feature1 (old)
/ \
-o---o---o---A---o---o-----------M master
当feature2和master合并时,公共祖先将提交5。
在这两种情况下,您都需要进行一些合并工作。这项工作并不取决于您选择上述两种策略中的哪一种。但是请确保
- 分支是短暂的,以限制它们与主分支之间的偏移量,
- 您可以定期将master合并到您的功能分支中,或在master上重新建立功能分支以使分支保持同步。
在团队中工作时,有助于协调当前正在做什么的人员。这有助于使正在开发的功能部件的数量保持较小,并可以减少合并冲突的数量。
feature1
到母版,然后再合并的问题feature2
。在那种情况下,当git尝试feature1
在压缩的提交之上重新应用提交时,第一种方法不会导致冲突,而第二种方法将允许git确定不需要合并那些提交吗?