How to get "their" changes in the middle of conflicting Git rebase?
GitRebaseGit RebaseGit Problem Overview
I have conflicting branches, feature_x
branched from main
.
Let's say when rebasing feature_x
on current main
, while resolving conflicts, I decide to take some (not all) of "their" (i.e. main
) files as-is.
How do I do that?
I tried:
git checkout main:foo/bar.java
fatal: reference is not a tree: TS-modules-tmp:foo/bar.java
git checkout refs/heads/main:foo/bar.java
fatal: reference is not a tree: refs/heads/TS-modules-tmp:foo/bar.java
Git Solutions
Solution 1 - Git
You want to use:
git checkout --ours foo/bar.java
git add foo/bar.java
If you rebase a branch feature_x
against main
(i.e. running git rebase main
while on branch feature_x
), during rebasing ours
refers to main
and theirs
to feature_x
.
As pointed out in the git-rebase docs:
> Note that a rebase merge works by replaying each commit from the
> working branch on top of the
For further details read this thread.
Solution 2 - Git
If you want to pull a particular file from another branch just do
git checkout branch1 -- filenamefoo.txt
This will pull a version of the file from one branch into the current tree