git 采用 theirs/ours 并成功合并代码
git take theirs/ours AND successfully merged code
假设在 feature
Git 分支上基于 master
Git 分支时发生冲突:
git init
echo -e "one\ntwo\nthree\nfour\nfive" > foo
git add foo
git commit -m a
echo -e "ONE\ntwo\nTHREE\nfour\nfive" > foo
git commit -a -m b
git checkout -b feature HEAD^
echo -e "One\ntwo\nthree\nfour\nFive" > foo
git commit -a -m c
git rebase master
冲突文件 foo
是:
<<<<<<< HEAD
ONE
=======
One
>>>>>>> c
two
THREE
four
Five
如何从命令行获取文件 foo_master
包含
成功合并(THREE
和 Five
),如果发生冲突,master
代码 (ONE
):
ONE
two
THREE
four
Five
请注意,它不同于 git checkout --ours foo
,后者不包含
来自 feature
的修改已成功应用 (Five
):
ONE
two
THREE
four
five
我还想要包含以下内容的对应文件 foo_feature
feature
代码以防发生冲突,但修改了 master
已成功应用 (ONE
):
One
two
THREE
four
Five
然后我的目标是垂直 vimdiff
文件 foo_master
和
foo_feature
解决冲突
两次使用 git merge-file
,一次使用 --ours
,一次使用 --theirs
。 (请注意,这些与 -s ours
不同,但更像 -X ours
,但它们仅适用于一组三个输入文件。)
您将需要所有三个输入文件,但它们在冲突合并期间可用,因为所有三个都在索引中,处于阶段 1(基础)、2(我们的)和 3(他们的)。使用 git checkout-index --stage=all
一次提取所有三个。请注意,这意味着 --temp
,因此您会打印三个文件名,其中包含三个输入文件的三个副本,从索引中复制到可用格式。
(这就是 git mergetool
获取文件的三个副本以提供给外部合并工具(例如 vimdiff)的方式。)
假设在 feature
Git 分支上基于 master
Git 分支时发生冲突:
git init
echo -e "one\ntwo\nthree\nfour\nfive" > foo
git add foo
git commit -m a
echo -e "ONE\ntwo\nTHREE\nfour\nfive" > foo
git commit -a -m b
git checkout -b feature HEAD^
echo -e "One\ntwo\nthree\nfour\nFive" > foo
git commit -a -m c
git rebase master
冲突文件 foo
是:
<<<<<<< HEAD
ONE
=======
One
>>>>>>> c
two
THREE
four
Five
如何从命令行获取文件 foo_master
包含
成功合并(THREE
和 Five
),如果发生冲突,master
代码 (ONE
):
ONE
two
THREE
four
Five
请注意,它不同于 git checkout --ours foo
,后者不包含
来自 feature
的修改已成功应用 (Five
):
ONE
two
THREE
four
five
我还想要包含以下内容的对应文件 foo_feature
feature
代码以防发生冲突,但修改了 master
已成功应用 (ONE
):
One
two
THREE
four
Five
然后我的目标是垂直 vimdiff
文件 foo_master
和
foo_feature
解决冲突
两次使用 git merge-file
,一次使用 --ours
,一次使用 --theirs
。 (请注意,这些与 -s ours
不同,但更像 -X ours
,但它们仅适用于一组三个输入文件。)
您将需要所有三个输入文件,但它们在冲突合并期间可用,因为所有三个都在索引中,处于阶段 1(基础)、2(我们的)和 3(他们的)。使用 git checkout-index --stage=all
一次提取所有三个。请注意,这意味着 --temp
,因此您会打印三个文件名,其中包含三个输入文件的三个副本,从索引中复制到可用格式。
(这就是 git mergetool
获取文件的三个副本以提供给外部合并工具(例如 vimdiff)的方式。)