I have (commits were created in alphabetical order)
origin/topic A-B-C-D-W-X
topic A-B-C-D-Y-Z
Is there a way i can get my topic
branch to look like
A-B-C-D-W-X-Y-Z
without introducing a merge commit?
Ordinarily I'd just do
$ git checkout topic
$ git fetch origin
$ git merge --ff-only origin/topic
But since Y
and Z
were committed after W
and X
, a fast forward will not work.
I suspect some clever rebasing or cherry picking might work but I can't wrap my head around it :{
When you select the Rebase and merge option on a pull request on GitHub.com, all commits from the topic branch (or head branch) are added onto the base branch individually without a merge commit. In that way, the rebase and merge behavior resembles a fast-forward merge by maintaining a linear project history.
Note that fast-forward updates do not create a merge commit and therefore there is no way to stop those merges with --no-commit. Thus, if you want to ensure your branch is not changed or updated by the merge command, use --no-ff with --no-commit.
In these scenarios, git merge takes two commit pointers, usually the branch tips, and will find a common base commit between them. Once Git finds a common base commit it will create a new "merge commit" that combines the changes of each queued merge commit sequence.
You can try with:
git checkout topic
git pull --rebase origin topic
Check the fetch man page notes about the rebase option.
I would recommend using something like git-smart, which will do a fast forward (which is faster) when possible, and if not, then a rebase. It will also stash local changes if you have any and give you a summary of the remote changes that were pulled.
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