有没有什么办法可以将分支A合并到B中,并且用B代替B中的任何内容而不管是否存在冲突?覆盖合并Git中的两个分支
回答
您可以使用-X
标志来指定更喜欢哪个,ours
或theirs
。
git merge <branch> -X ours
将始终偏好您当前所在分支的版本,而git merge <branch> -X theirs
会偏好被合并分支的版本。
结帐从man git-merge
下面了解更多详情:
我们
此选项强制冲突的帅哥是自动解决通过支持我们的版本干净。来自另一棵与我们不冲突的树的变化反映到合并结果。对于二进制文件,整个内容都是从我们这边拿来的。
他们
这是 “我们的” 相反。
所以在你的情况下,运行git merge B -X ours
当分支A
应该做的伎俩!
已发布的两个答案(-X ours
和-s ours
)都是正确的,或者等价地,都是错误的。这取决于你想要的结果。
下面是一个简单而具体的例子。假设我们有以下几点:
O
/ \
... - B M
\ /
T
其中B
是公共基础犯,O
是“我们”的承诺,T
是“他们的”承诺,并M
是合并后的结果(即我们想要生成)。
进一步假设在提交B
,文件conflict.txt
说:
I am a file
that contains
some text.
另一个文件,README
,完全是空的。
在提交O
时,我们将第二行更改为that has
而不是that contains
。 (也就是说,我们改变了第二行。)我们根本没有碰到README
。
在承诺T
,他们改变了第二行阅读that used to have
。 (That is, they changed the word "contains" to "still contains".) They also added some text to
自述文件`。
现在,如果您要求git将其分支合并到我们的分支中,文件conflict.txt
中将存在冲突,因为git不知道如何处理冲突的更改。使用-X ours
告诉git:如果发生冲突,请使用我们的版本,所以提交M
将保留我们的更改并放弃其更改。
另一方面,有没有与README
冲突,因为我们没有改变它。他们只有变更了README
。与-X ours
,提交M
将保持其变化。
然而,使用-s ours
,git也会保留我们的版本README
。
根据你的问题,我不清楚这些,或者你想要的第三种非内置替代选项。