How to get "their" changes in the middle of conflicting Git rebase?

GitRebaseGit Rebase

Git 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 branch. Because of this, when > a merge conflict happens, the side reported as ours is the so-far > rebased series, starting with <upstream>, and theirs is the working > branch. In other words, the sides are swapped.

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOndra ŽižkaView Question on Stackoverflow
Solution 1 - GitiGELView Answer on Stackoverflow
Solution 2 - GitAdrian CornishView Answer on Stackoverflow