尽可能自动解决git冲突

时间:2014-02-28 13:56:22

标签: git merge merge-conflict-resolution

我们有一个包含50多个项目的.NET解决方案文件,我们经常出现这样的情况:两个人会做一个相对较小的更改(例如更新Nuget包或重命名文件)影响所有50个项目文件。

这意味着每次合并这些分支时,所有50个文件都会发生冲突 - 但如果您在几乎任何合并工具中打开它们,它将能够自动解决它们。这意味着我在合并中没有实际工作,但是我必须单击每个文件,等待它在Beyond Compare中打开,然后单击“保存”,然后单击“关闭”。单击下一个文件,单击保存,单击关闭...重复55次。

我的问题是:有什么方法可以让Git在遇到冲突的文件时尝试使用你的合并工具自动解决它们?

更新:希望这会增加一些清晰度:我必须逐个解决每个冲突,但由于我的合并工具可以自动解决每个冲突,因此没有合并命令的某种批处理操作或选项我可以打电话?

3 个答案:

答案 0 :(得分:0)

您的合并工具' Beyond Compare'正在使用一些合并策略来并排显示差异和结果。确定该工具采用的合并策略,然后在GIT中找到等效策略。有关可用的策略及其选项,请参阅git help merge

默认情况下,GIT使用'递归'战略。作为快速检查,您可以使用' resolve'策略,看看你是否得到了你想要的分辨率。

git merge -s resolve ...

或使用'递归'具有可能选项或两个选项的策略,例如:

git merge [-s recursive] -X ignore-all-space

一旦您确定了所需的策略,就可以使用配置变量或命令别名将其设置为默认策略。

答案 1 :(得分:0)

前段时间我遇到了同样的问题。经过多次搜索,我找到了onetwo解决方案。

将其放在 $ HOME / .gitconfig 中:

[merge]
    ff = no
    commit = no

您可以使用git-config进行此操作:

$ git config --global merge.commit no
$ git config --global merge.ff no

现在,当您合并分支时,git会使用“递归”策略自动合并代码

$ git merge master
Auto-merging Dockerfile
hint: Waiting for your editor to close the file...
Merge branch 'master' into feature/ea-116
Merge made by the 'recursive' strategy.
 Dockerfile        | 63 +++++++++++----------------------------------------------------
 1 file changed, 129 insertions(+), 59 deletions(-)
...

答案 2 :(得分:-1)

当存在无法由git自动解决的冲突时,您可以为git设置合并工具。请看一下:

git-mergetool