Re: git pull --rebase differs in behavior from git fetch + git rebase
- From
Joshua Jensen <jjensen@workspacewhiz.com>
- Date
- Aug 27, 2010, 15:48 UTC
- Message-ID
- <4C77DE60.6020809@workspacewhiz.com>
- In-Reply-To
- <alpine.DEB.2.00.1008270124450.20874@narbuckle.genericorp.net>
----- Original Message ----- From: Dave Olszewski Date: 8/27/2010 2:27 AM
Show 27 quoted lines
> On Thu, 26 Aug 2010, Joshua Jensen wrote: > >> I have a case where 'git pull --rebase' does not do the Right Thing >> (according to me). >> >> If I run 'git rebase origin/master', that rebase does the right >> thing, perfectly reapplying my *single* commit on top of the upstream. >> >> 'git pull --rebase' ends up reapplying a bunch of much earlier >> commits and ends up with a conflict. >> >> The documentation for git pull --rebase states: "Instead of a merge, >> perform a rebase after fetching. If there is a remote ref for the >> upstream branch, and this branch was rebased since last fetched, the >> rebase uses that information to avoid rebasing non-local changes." I >> do not understand >> >> I'm studying the git-pull script right now, but I have to admit this >> is beyond me. I'm sure if I stare hard enough, I'll get it. >> >> I mistakenly have assumed 'git pull' = 'git fetch; git merge' and >> that 'git pull --rebase' = 'git fetch; git rebase'. Does anyone want >> to clarify what is really going on? Unfortunately, I can't publish >> the repository in question. > > Are you by any chance running a git with commit cf65426de? If not, give > it a try and see if it corrects your issue.
I was not, but now I am.
Show 6 quoted lines
> The main difference between "git pull --rebase" and "git fetch && git
> rebase @{u}" is that "git pull --rebase" will attempt to use the reflog
> to find a suitable "upstream" candidate instead of assuming your
> tracking branch is the upstream itself. This is intended to help
> recover from upstream rebases, but has adverse effects sometimes, which
> commit cf65426de should help with.Unfortunately, commit cf65426de helps only a little. The 'git pull --rebase' reports "Nothing to do" and moves the master branch to origin/master, leaving behind the commit needing to be rebased.
What else might there be to try? I would like to help with a repro, if possible.
Josh