为了避免在合并到 master 时发生冲突,您可以使用 `git merge --ours' 忽略 master 中可能与发布更改发生冲突的任何更改,但是当您有多个开发流时,这可能会出现问题。例如,如果您有修复生产(主)代码的支持问题,或者如果您有多个发布分支。
与分支合作时,合并冲突是一揽子交易;它们会发生,只需调整您的工作流程以单独处理它们,以尽量减少任何不利影响。
为了说明这一点,请考虑这样一个场景:生产中存在已修复错误的现有版本,以及准备将发布分支移动到生产(合并到主)的发布分支。它看起来像这样:
master -A---------E------G
\ \ / /
bug-fix \ C-D /
\ /
release B--*--*--F
在此,B & C 是从 A 分支出来的,E 是提交 D 在bug-fix到master的合并提交,G 是提交 F 在release到master的合并提交。
如果在bug-fix和release中更改了相同的文件,则在 G 中可能会出现合并冲突。如果git merge --ours
已在 G 处使用,则在 E 处所做的更改可能会丢失。
可以通过分支 master 并将 release 合并到其中来处理合并,然后将这个一次性分支重新定位到 master 上。只有在流程受到良好控制的情况下才应该这样做,例如指定一个人将所有合并到 master 中。
此时,G 将与 F 不完全相同,它还将包括在 E 的错误修复提交中引入的更改。
也可以将bug-fix合并到release和master中,这将使 F 和 G 再次相同。但是,有一种最佳做法是永远不要合并。这意味着,按照图中的顺序排列的分支(在顶部更稳定),合并应该始终从较低的分支到较高的分支。这有两个主要好处,第一个是稳定的代码不会合并到不太稳定的代码中,并且分支保持纯粹,因为它们只包含与它们引入的特性相关的更改。例如,如果 D 被合并到发布中,则需要与发布一起测试然后 release 包含它正在引入的功能的更改集和错误修复的更改集。
为了防止这成为问题,我总是检查更稳定的分支,将不太稳定的分支合并到其中并从那里开始。
另外,请注意,--ours
这是签出的分支,是--theirs
正在合并的另一个分支。当您更改合并的方向时,它们所指的更改将被交换。