如何在Git重新设置冲突的中间获取“他们的”更改?


349

我有冲突的分支,branch2从branch1分支。

假设在branch2基于current的基础上branch1,在解决冲突的同时,我决定按原样使用“他们的”(即)文件的一部分(不是全部)branch1。我怎么做?

我试过了:

git checkout branch1:foo/bar.java
fatal: reference is not a tree: TS-modules-tmp:foo/bar.java

git checkout refs/heads/branch1:foo/bar.java
fatal: reference is not a tree: refs/heads/TS-modules-tmp:foo/bar.java

41
注意:如果您将branch2重新定为branch1,则重播相对于branch1进行,因此“其”实际上是branch2,“我们的”则是branch1。 git.661346.n2.nabble.com/...
福兹先生


1
这只花了我大约20个小时的勤奋工作。老实说,我认为“我们的”将永远是工作的副本。
西奥多·R·史密斯

Answers:


496

您要使用:

git checkout --ours foo/bar.java
git add foo/bar.java

如果衍合分支feature_xmaster(即运行git rebase master时的分支feature_x),垫底期间ours是指mastertheirsfeature_x

正如在git-rebase文档中指出的那样:

请注意,rebase合并通过重播分支顶部的工作分支中的每个提交来工作。因此,当发生合并冲突时,报告为我们方的那一面是到目前为止的基础系列,从<upstream>开始,而他们方是工作分支。换句话说,双方交换。

有关更多详细信息,请阅读此线程


0

如果要从另一个分支中提取特定文件,只需执行

git checkout branch1 -- filenamefoo.txt

这会将文件的一个版本从一个分支拉到当前树中


35
在重新设置基准的过程中,这可能不是一个好主意,因为它将从该分支的头部拉出文件,而不是在处于冲突的重新设置状态的分离头位置
Clintm 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.