Search code examples
gitgit-mergegit-rebasegit-cherry-pick

Git: How to merge upstream changes without causing a merge commit?


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 :{


Solution

  • 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.