In my git repo, I have a Master
branch. One of the remote devs created a branch Branch1
and had a bunch of commits on it. I branched from Branch1
, creating a new branch called Branch2
(git checkout -b Branch2 Branch1
) such that Branch2
head was on the last commit added to Branch1
:(Looks like this)
Master--- \ Branch1--commit1--commit2 \ Branch2 (my local branch)
Branch1
has had a number of changes. The other dev squashed his commits and then added a few more commits. Meanwhile, ive had a bunch of changes in my branch but havent committed anything yet. Current structure looks like this:
Master--- \ Branch1--squashed commit1,2--commit3--commit4 \ Branch2 (my local branch)
Now I want have to rebase my changes on top of Branch1
. I am supremely confused on how to go about this. I know the 1st step will be to commit my changes using git add .
and git commit -m "message"
. But do i then push? using git push origin Branch2
? or git push origin Branch2 Branch1
? Help is much needed and GREATLY appreciated, also if I can some how create a backup of my branch, it will be great in case I screw something up
As opposed to merging, which pulls the differences from the other branch into yours, rebasing switches your branch's base to the other branch's position and walks through your commits one by one to apply them again.
First backup your current Branch2
:
# from Branch2 git checkout -b Branch2_backup
Then rebase Branch2
on Branch1
:
# from Branch2 git fetch origin # update all tracking branches, including Branch1 git rebase origin/Branch1 # rebase on latest Branch1
After the rebase your branch structure should look like this:
master -- \ 1 -- 2 -- 3 -- 4 -- Branch2'
In the diagram above, the apostrophe on Branch2
indicates that every commit in the rebased Branch2
after commit 4 is actually a rewrite.
Keep in mind that you have now rewritten the history of Branch2
and if the branch is already published you will have to force push it to the remote via
git push --force origin Branch2
Force pushing can cause problems for anyone else using Branch2
so you should be careful when doing this.
git rebase branch1 branch2
will rebase branch branch2
onto branch1
. Operationally, this means any commits which are contained only in branch2
(and not in branch1
) will be replayed on top of branch1
, moving the branch2
pointer with them. See git rebase --help
for more information, including diagrams of this operation.
The operation might produce some conflicts which then you'll have to resolve manually. Edit the affected files, merging content and removing any failed hunks. Afterwards, mark the files as merged using git add <file>
and then continue the rebase using git rebase --continue
. Repeat until it is done.
Once done, you have nothing else to do. You don't have to push. However if you wish to mirror your new changes to some other repository (for instance, to share it with others or to have those changes in another repository of yours), do a final git push
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With