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 --theirs
git add
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.
You could do a rebase interactive:
git checkout new_feature
git rebase --interactive old_feature
and drop B1
: you simply delete the line with B1:
# If you remove a line here THAT COMMIT WILL BE LOST