2017-09-13 75 views
1

像大多数人一样,我在多项目开发中使用git,许多开发人员和许多更改每天都会传播到主要分支。很多时候,当我将一个父分支合并到一个功能(或错误修复)分支中时,我遇到了几个我没有碰到甚至看不到的文件的冲突!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

对于冲突,两个副本都不必编辑过,如果只有一个副本有共同祖先的变化,那么不应该有冲突,那是你正在经历什么? – jrtapsell

+0

“我碰到了几个文件,我没有碰到甚至看到冲突” - 这意味着无论如何都会触及文件。如果文件实际上未被修改,它们不会发生冲突。 – max630

+0

[This answer](https://stackoverflow.com/a/18262173/2303202)应该有助于找出你不想改变的文件中的局部变化。 – max630

回答

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简单和简单。您不会在未修改的文件上发生冲突。

+0

我添加并提交了我已更改的文件。你说了什么“git status”返回的结果与我的不同。我说冲突文件没有显示为已修改。事实上,冲突文件不是我提交的任何部分,也不是他们或任何其他文件显示在“git状态”上。但是,在合并父母之后,我经常发生冲突。如果这种情况只发生一次或两次,肯定会出现操作错误 - 我有好几年的时间了,而不仅仅是我。我们是否设置错误 - 这可能是可能的 - 因此我原来的问题 – JoeG

+0

不知道你想知道你在我所说的关于状态的差异上,但是状态输出在这里并没有真正的相关性。 (除此之外,如果你说这些文件*是以某种方式列出来的,那么你会认为它们不会被修改......如果它们被列出*,它们在某种程度上被修改了。)但是没关系;你需要过去状态的事情,因为这不是告诉你的文件的历史。如果有冲突,它就是提交的一部分。直到你过去坚持说它不是真的,没有人能够帮助你。 –

+0

在我们的存储库上,我只是跑了一个'find。 -name“* .java”| wc -l'。这返回了7651个文件。我不知道许多这些文件,甚至没有在编辑器中打开它们。然而,当我将父分支合并到我的分支时,我经常会得到3-5个我从未听说过的文件(其他开发人员已经修改并推送到父分支),在我的合并中显示为冲突。看起来你坚持认为这不会发生,这可能只是沟通不畅,而是我经常观察到的行为,我毫无疑问。 – JoeG

相关问题