Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 合并两个分支,如何接受所有冲突的一个分支_Git_Git Merge - Fatal编程技术网

Git 合并两个分支,如何接受所有冲突的一个分支

Git 合并两个分支,如何接受所有冲突的一个分支,git,git-merge,Git,Git Merge,我把两个分支合并在一起,比如说branchA和branchB。他们有大约100个冲突的文件 branchB已经接受了所有的工作,是我所需要的100%。我不想强迫你做任何事 是否有一种方法可以将两者合并,只需对任何冲突说接受branchB上的内容,这样我就不必打开每个文件或“他们的”或“我们的”文件 正在尝试从Branch进行递归合并,并在中使用-s和-x选项,但似乎没有按预期工作 谢谢根据您的提问,答案是简单的顺序: git checkout branchA git merge -X their

我把两个分支合并在一起,比如说branchA和branchB。他们有大约100个冲突的文件

branchB已经接受了所有的工作,是我所需要的100%。我不想强迫你做任何事

是否有一种方法可以将两者合并,只需对任何冲突说接受branchB上的内容,这样我就不必打开每个文件或“他们的”或“我们的”文件

正在尝试从Branch进行递归合并,并在中使用-s和-x选项,但似乎没有按预期工作


谢谢

根据您的提问,答案是简单的顺序:

git checkout branchA
git merge -X theirs branchB
在你盲目应用之前,确保你知道你在做什么!您还说您使用了
-s
-x
,但是
git merge
没有
-x
选项。(也许您的意思是
-X
。显示您使用的实际命令,以及至少一些结果,可能会有所帮助。)如果您遇到我称之为高级冲突的情况,
-X
选项将不会有帮助,您需要进行一些手动清理,但您可以自动执行部分甚至全部清理

合并要素 请记住,
git merge
所做的是合并更改。为此,它需要找到一个共同的起点。假设你要么是爱丽丝或亚当,在布兰卡工作,要么是鲍勃或芭芭拉,在布兰卡工作。用户“A”从一些提交开始,并进行了更多的提交,以提交
A
结束:

          o--o--A   <-- branchA
         /
...--o--*
例如,在运行
git fetch
之后,存储库中现在拥有的是一整套提交:

          o--o--A   <-- branchA
         /
...--o--*
         \
          o--o--B   <-- branchB
Git现在将尝试(如果可以的话)组合这两组更改,将它们应用于提交中的任何内容
*
。如果Git可以自己完成所有这一切,它会使最终合并提交成为一个几乎普通的提交,除了它有两个父指针,指向commit
a
和commit
B
。这会将名称
branchA
更改为指向新提交,并给出:

          o--o--A
         /       \
...--o--*         M   <-- branchA (HEAD)
         \       /
          o--o--B   <-- branchB
或:

它将分别将版本2或版本3从索引复制到工作树。请注意,这不会影响索引内容!它只从索引中提取记住,这也称为暂存区,但其中有三个条目,其中没有一个被暂存到工作树

您还可以运行:

git checkout --ours README.txt
git checkout branchA -- README.txt
git rm README.txt
或:

它们将提交的文件从提交
A
或提交
B
复制到第0阶段的索引中,然后从索引复制到工作树。复制到stage zero会使文件准备好提交,因为它已经删除了插槽1-3条目

您还可以运行:

git checkout --ours README.txt
git checkout branchA -- README.txt
git rm README.txt
这将从所有阶段和工作树中删除文件。(仅当正确的合并结果缺少文件
README.txt
时,才应执行此操作)

请注意,您可以从编写的脚本执行这些操作中的任何一个。您可以使用
gitls文件--stage
检查索引。在合并过程中,冲突文件及其非零阶段编号将显示在此处。或者,您可以使用
git ls files-u
仅显示未合并(阶段大于零)的条目

因此,如果在使用
-X thiers
获得合并冲突后运行
git ls files-u
,您将看到仍然存在问题的文件集,根据定义,所有这些问题都是由于高级冲突造成的。然后,您可以从中决定是否可以执行一个整体操作来提取所有此类文件的版本。如果是这样,只需编写一个简短的命令或脚本,获取所有这些文件名,并将它们传递给git checkout branchB,例如:

git ls-files -u | cut -d$'\t' -f 2 | uniq | xargs git checkout branchB --

(只要文件名中没有空格)。

您是否处于冲突状态并希望接受所有
他们的
?您向
-x
-s
提供了什么?我希望
git merge other_branch-s theres
完全按照您的要求执行[我自己的问题]:另外:请注意,这通常不会正确地尊重您希望签出的分支中删除的文件,即使删除的文件中没有冲突。@ely:如果您是指
git ls files-u
脚本:是,如果修改/删除高级冲突后有未合并的文件,则可能需要检查未合并的文件占用的暂存槽。但是,如果文件
X
不在
branchB
中(它在
branchA
侧被修改,在
branchB
侧被删除),您至少会在
git checkout branchB--X
中看到一个错误。我可以验证您在您提到的最后一个案例中没有看到错误
git checkout master
然后
git checkout origin/other branch--.
这将覆盖从
其他分支
到发出命令的本地工作
master
分支的任何内容,但它将静默地保留
master
上存在但在
其他分支
上删除的任何文件,而且它们不会出现在
git status
@ely的输出中:我不建议
git签出其他分支--.
,而是明确地命名单个文件。这就是
xargs
的作用。这通常很难解决,例如,当解决分支之间的冲突时,可能会有数千个不同的文件冲突,而没有特定的模式,您可以在文件名上形成,以区分要保留的文件。在其他情况下,您可能需要一个分支的尖端真正成为另一个分支的尖端,这意味着您需要第二个分支的全部内容,并且您不希望尝试的任何合并解析可能会保留第一个分支上的文件的某些方面,这些方面与计算的合并解析相加。
git ls-files -u | cut -d$'\t' -f 2 | uniq | xargs git checkout branchB --