Say I'm working on a feature in a branch oldFeature. I've done commits A and B1 and sent it for the code review. In B1 I changed some existing files but also added newfile.txt.
In the meantime I started working in a branch newFeature, forked from oldFeature (HEAD == B1). I've added C, D, E.
Meanwhile, I got code review results and had to amend B1, changing newfile.txt, and also changing some existing files. After the fixes, it became B2.
So to illustrate it:
newFeature oldFeature
A A
B1 B2 [B1 with some fixes]
C
D
E
Now I'm in newFeature and I want to rebase newFeature to have B2 instead of B1. When I simply do the rebase, I have rebase a conflict due to newfile.txt being added in both parts of the rebase.
I want to keep the version from oldFeature (B2).
I can't move B1 to the HEAD, because C, D, E depend on it.
I know I can do the following workaround:
git checkout --theirsgit add- continue rebase
Then I'll have a situation like this:
newFeature oldFeature
A A
B2 B2
BX
C
D
E
where BX is more or less B2\B1 on the files that existed in A.
Now I can do interactive rebase and remove BX.
However my workaround is kind of convoluted. Is there a simpler way to do it? By simpler I mean, that I either have
newFeature oldFeature
A A
B2 B2
B2\B1
C
D
E
without any rebase conflicts, and then I can get rid of that B2\B1 commit, or to replace them automatically so I get
newFeature oldFeature
A A
B2 B2
C
D
E
Using Git 1.8.0.