我们有一个包含50多个项目的.NET解决方案文件,我们经常出现这样的情况:两个人会做一个相对较小的更改(例如更新Nuget包或重命名文件)影响所有50个项目文件。
这意味着每次合并这些分支时,所有50个文件都会发生冲突 - 但如果您在几乎任何合并工具中打开它们,它将能够自动解决它们。这意味着我在合并中没有实际工作,但是我必须单击每个文件,等待它在Beyond Compare中打开,然后单击“保存”,然后单击“关闭”。单击下一个文件,单击保存,单击关闭...重复55次。
我的问题是:有什么方法可以让Git在遇到冲突的文件时尝试使用你的合并工具自动解决它们?
更新:希望这会增加一些清晰度:我必须逐个解决每个冲突,但由于我的合并工具可以自动解决每个冲突,因此没有合并命令的某种批处理操作或选项我可以打电话?
答案 0 :(得分:0)
您的合并工具' Beyond Compare'正在使用一些合并策略来并排显示差异和结果。确定该工具采用的合并策略,然后在GIT中找到等效策略。有关可用的策略及其选项,请参阅git help merge
。
默认情况下,GIT使用'递归'战略。作为快速检查,您可以使用' resolve'策略,看看你是否得到了你想要的分辨率。
git merge -s resolve ...
或使用'递归'具有可能选项或两个选项的策略,例如:
git merge [-s recursive] -X ignore-all-space
一旦您确定了所需的策略,就可以使用配置变量或命令别名将其设置为默认策略。
答案 1 :(得分:0)
前段时间我遇到了同样的问题。经过多次搜索,我找到了one和two解决方案。
将其放在 $ 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设置合并工具。请看一下: