Reputation: 26538
let's say if I have 2 branches
topic
and master
if I am on topic
branch, and run git rebase master
does it rebase master or rebase topic branch?
doing git rebase --help
gave me this
Assume the following history exists and the current branch is "topic":
A---B---C topic
/
D---E---F---G master
From this point, the result of either of the following commands:
git rebase master
git rebase master topic
would be:
A'--B'--C' topic
/
D---E---F---G master
NOTE: The latter form is just a short-hand of git checkout topic followed by git rebase master. When rebase exits topic will remain the checked-out branch.
And if I want to achieve this D---E---F---G---A---B---C master
, should I switch to master and run git rebase -i topic
?
And if I run git rebase -i topic
try to squash A,B,C to C to become D---E---F---G---C master
, I get noop
Upvotes: 2
Views: 1330
Reputation: 20246
Assuming you start out with a tree that looks like this
A---B---C topic
/
D---E---F---G master
You'll want to run 2 commands git rebase master
to make it look like this
A'--B'--C' topic
/
D---E---F---G master
then from master
run git merge topic
, which will do a fast forward merge, and you'll end up with a tree that looks like this
topic
/
D---E---F---G---A---B---C -- master
Can I just checkout master and run git rebase topic??
Running that command would result in a tree that looks like this
topic
/
D---A---B---C---E---F---G -- master
This is the (somewhat edited) git documentation for rebase
, hopefully this will help:
All changes made by commits in the current branch but that are not in upstream are saved to a temporary area.
If you are on topic
and run git rebase master
, that means commits A, B and C are going into a temporary area.
The current branch is reset to upstream. This has the exact same effect as git reset --hard upstream.
At this point the temporary state of the tree looks like this
topic
/
D---E---F---G -- master
The commits that were previously saved into the temporary area are then reapplied to the current branch, one by one, in order.
Commits A, B, C that were saved into the temporary area are "recommitted" to the branch you are currently on topic
.
topic
/
D---E---F---G---A---B---C -- master
Running git rebase topic
from master
would perform the exact same steps, except instead of putting commits A, B, C into the temporary area, it would put commits E, F G into the temporary area.
Upvotes: 3