I think I am confused on how to use SourceTree GUI to do git rebase. I have two branches \"master\" and \"dev\". As seen, the two branch diverged. I want to do a rebase on \"dev
But picking this option seems have no effect whatsoever.
Yes, because current changes are the one of the current branches, which is dev
.
Rebasing dev
on top of dev
means an no-op.
git checkout dev
git rebase master
That means: current branch is dev
: to be rebased on top of master
.
So in SourceTree, you need to right-click on master
(while dev
is checked out), and select:
Rebase current changes onto master
Howe adds in the comments:
Current Naming of "
rebase current changes onto [branch]
" is misleading. Check out this improvement discussion SRCTREE-1578.After finding myself baffled attempting to bring a feature branch up to date with development and failing, I've come to realize that the left-pane context menu item labeled “
rebase current changes onto $somebranch
” actually does the opposite of what its name suggests:
it rebases the current branch to the state of $somebranch;
In other words it rebases$somebranch
onto (or into) the current branch, not the other way around. (Right?)The preposition “
onto
” in the current text is misleading; it implies that the object of the sentence ($somebranch
in my example) will receive the changes.
In fact, it is the opposite that will occur.
The absence of the current branch's name adds to the confusion.A re-wording that improves the sentence structure and includes the name of the affected branch would afford a huge win for clarity.
For example:rebase $currentbranch to head of $somebranch rebase $somebranch onto $currentbranch