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

Git:如何使用;“他们的”;对于未修改的文件,其余文件是否正常合并?,git,git-merge,Git,Git Merge,像大多数人一样,我在多项目开发中使用了git,有许多开发人员,每天都有许多更改被传播到主要分支。很多时候,当我将一个父分支合并到一个功能(或bug修复)分支中时,我会在几个我没有接触甚至没有查看的文件上遇到冲突 背景 分支机构设置: git checkout master git checkout -b myFeatureBranch 让我们假设两天或更多的时间过去了。我的功能部件代码现在可以查看了。注意:我在这里使用master只是为了清楚起见,实际上,它是另一个唯一命名的发布分支。许多其他

像大多数人一样,我在多项目开发中使用了
git
,有许多开发人员,每天都有许多更改被传播到主要分支。很多时候,当我将一个父分支合并到一个功能(或bug修复)分支中时,我会在几个我没有接触甚至没有查看的文件上遇到冲突

背景

分支机构设置:

git checkout master
git checkout -b myFeatureBranch
让我们假设两天或更多的时间过去了。我的功能部件代码现在可以查看了。注意:我在这里使用
master
只是为了清楚起见,实际上,它是另一个唯一命名的发布分支。许多其他开发人员将他们的错误修复和功能分支合并到
master
(在他们的代码审查获得批准之后!)。这些更改可能影响了我在功能分支中更改的一个或多个文件。因此,我需要将
master
合并到我的分支中,以获得所有最新的代码

我的问题

我没有找到这个具体问题的答案。我看哪个也指。根据这些信息,如果我需要将
master
合并到我的功能分支中,那么按照该逻辑,我将执行以下操作:

git checkout myFeatureBranch
git merge -X theirs master
我相信(从
man
page)会:

但这不是每个人真正想要的,是吗


如果我在我的分支中没有触及该文件,那么是的,这正是我想要的;但是,如果我修改了一个文件(并提交到我的分支),那么我希望完成正常的合并(和冲突解决)过程。在这种情况下,我不想偏爱他们的。上面的方法是否可以做到这一点?如果没有,是否有一个合并命令来执行此操作

对于双方都未修改的文件,不能存在冲突。在你的评论中,你可以随心所欲地坚持它正在发生,但事实并非如此

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

但合并冲突的问题不在于是否存在未提交的更改,
status
会报告它;这是自合并基础之后是否有更改。如果您想查看在从
master
my_branch
的拟议合并期间,文件中会考虑哪些更改,您可以执行以下操作

git diff `git merge-base master my_branch` my_branch -- path/to/some/file
现在,这些更改可能是由工具引入的。在某些情况下,您可能具有导致不必要更改的行尾设置。无论什么一旦你知道它是什么,你可以看看如何让它停止发生


但是说“如果我没有更改文件,就从
他们的
中获取更改”的命令是
gitmerge
简单明了。在未修改的文件上不会出现冲突。

在双方都未修改的文件上不可能存在冲突。在你的评论中,你可以随心所欲地坚持它正在发生,但事实并非如此

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

但合并冲突的问题不在于是否存在未提交的更改,
status
会报告它;这是自合并基础之后是否有更改。如果您想查看在从
master
my_branch
的拟议合并期间,文件中会考虑哪些更改,您可以执行以下操作

git diff `git merge-base master my_branch` my_branch -- path/to/some/file
现在,这些更改可能是由工具引入的。在某些情况下,您可能具有导致不必要更改的行尾设置。无论什么一旦你知道它是什么,你可以看看如何让它停止发生


但是说“如果我没有更改文件,就从
他们的
中获取更改”的命令是
gitmerge
简单明了。未修改的文件不会发生冲突。

对于冲突,不是两个副本都必须经过编辑,如果只有一个副本有来自共同祖先的更改,就不应该发生冲突,这就是您所经历的吗?“我在几个我没有接触甚至没有查看过的文件上遇到冲突”-这意味着无论如何都会接触到这些文件。如果文件实际上没有被修改,它们就不会冲突。应该有助于找出您不打算更改的文件中的本地更改。各位,在合并之前,我会做一个“git状态”。我得到的文件中没有一个出现冲突。我们使用gradle进行构建。今天的合并在gradle.properties上发生冲突。我没有触摸、更改或查看分支中的文件。我已经为快进和递归合并设置了git。也许我的设置中有什么地方出错了,但是我在我的分支中没有以任何方式接触标记为冲突的文件。其他推到父级的开发人员-确定。这就是我当初合并父级的原因。你误解了git status告诉你的内容。
git status
所做的是运行两个
git diff
s:一个从
HEAD
到索引,另一个从索引到工作树。在开始合并之前,这两个差异都应为空。这本身并没有告诉您自关键的合并基提交以来发生了什么变化。我认为这里的一个主要问题是,
git merge
的实际功能对许多用户来说是神秘的……对于冲突来说,不是两个副本都必须经过编辑,如果只有一个副本有来自同一祖先的更改,就不应该有冲突,这就是你所经历的吗?“我在几个我没有碰过甚至没有看过的文件上遇到冲突”-这意味着这些文件在某种程度上被碰了一次