Git:如何使用“他们的”未修改的文件,其余的正常合并?

时间:2017-09-13 11:53:39

标签: git git-merge

与大多数人一样,我在许多开发人员的多项目开发中使用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。上面那样做了吗?如果没有,是否有一个合并命令呢?

1 个答案:

答案 0 :(得分:0)

双方未修改的文件不会发生冲突。你可以在你的评论中尽可能地坚持它,但事实并非如此。

你试图“证明”它正在发生的第一个声明是文件没有显示在git status中;这只意味着文件没有任何未提交的更改。你真正应该做的是在合并时有一个干净的工作树,这样git status就不会报告任何文件。

但合并冲突的问题不在于是否存在未提交的更改,status会报告此更改;是合并基础以来是否有变化。如果您想查看从mastermy_branch的建议合并期间文件中将考虑哪些更改,您可以

git diff `git merge-base master my_branch` my_branch -- path/to/some/file

现在变化可能是工具引入的。在某些情况下,您可能会有行结束设置导致不必要的更改。随你。一旦你知道它是什么,你就可以看看如何让它停止发生。

但是说“如果我没有更改文件,从theirs进行更改”的命令是git merge简单明了。您不会在未修改的文件上出现冲突。