如何在冲突的Git rebase中获得"他们的"变化?

Ond*_*žka 330 git rebase git-rebase

我有分支冲突,branch2从branch1分支.

让我们说当重新定位branch2当前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
Run Code Online (Sandbox Code Playgroud)

iGE*_*GEL 474

你想用:

git checkout --ours foo/bar.java
git add foo/bar.java
Run Code Online (Sandbox Code Playgroud)

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

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

请注意,rebase合并的工作原理是从分支顶部的工作分支重放每个提交.因此,当合并冲突发生时,报告为我们的那一方是迄今为止重新定义的系列,从<upstream>开始,他们是工作分支.换句话说,双方交换.

有关详细信息,请阅读此主题.

  • 我确信合并和变基对于“我们的”和“他们的”具有相反的含义是有充分理由的,但一致性会好得多。 (9认同)
  • 请注意,在解决冲突时,“--ours”也对应(更直观地)IDE 中的“当前更改”,而“--theirs”对应“传入更改” (3认同)

Adr*_*ish 7

如果您想从另一个分支中提取特定文件,只需执行以下操作

git checkout branch1 -- filenamefoo.txt
Run Code Online (Sandbox Code Playgroud)

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

  • 在变基过程中这可能是一个坏主意,因为它会从该分支的头部拉出文件,而不是在您处于冲突变基状态的分离头点 (43认同)