与大多数人一样,我在许多开发人员的多项目开发中使用git
,并且每天都会将许多更改传播到主要分支。很多时候,当我将父分支合并到一个功能(或错误修复)分支时,我会在几个我没有触及甚至看不到的文件上发生冲突!
背景
分行设置:
git checkout master
git checkout -b myFeatureBranch
假设两天或两天以上。我的功能代码现已准备好进行审核。注意:我在这里使用master
只是为了清楚,实际上,它是另一个唯一命名的发布分支。许多其他开发人员将他们的错误修复和功能分支合并到master
(在他们的代码审核被批准后!)。这些更改 可能 影响了我在功能分支中更改的一个或多个文件。因此,我需要将master
合并到我的分支中以获取所有最新代码。
我的问题
我没有找到这个具体问题的答案。我查看this question,它也指向to this question。根据那里的信息,如果我需要将master
合并到我的功能分支中,然后遵循该逻辑,我会这样做:
git checkout myFeatureBranch
git merge -X theirs master
我相信(来自man
页面):
This option forces conflicting hunks to be auto-resolved cleanly by
favoring `their` version.
但这不是真正让人想要的吗?
如果我的分支中的文件没有被触及,那么这就是我想要的;但是,如果我修改了一个文件(并提交给我的分支),那么我希望完成正常的合并(和冲突解决)过程。在这种情况下,我不想赞成theirs
。上面那样做了吗?如果没有,是否有一个合并命令呢?
答案 0 :(得分:0)
双方未修改的文件不会发生冲突。你可以在你的评论中尽可能地坚持它,但事实并非如此。
你试图“证明”它正在发生的第一个声明是文件没有显示在git status
中;这只意味着文件没有任何未提交的更改。你真正应该做的是在合并时有一个干净的工作树,这样git status
就不会报告任何文件。
但合并冲突的问题不在于是否存在未提交的更改,status
会报告此更改;是合并基础以来是否有变化。如果您想查看从master
到my_branch
的建议合并期间文件中将考虑哪些更改,您可以
git diff `git merge-base master my_branch` my_branch -- path/to/some/file
现在变化可能是工具引入的。在某些情况下,您可能会有行结束设置导致不必要的更改。随你。一旦你知道它是什么,你就可以看看如何让它停止发生。
但是说“如果我没有更改文件,从theirs
进行更改”的命令是git merge
简单明了。您不会在未修改的文件上出现冲突。