git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: Possible bug: git pull --rebase discards local commits

From
IDIgor Djordjevic <igor.d.djordjevic@gmail.com>
Date
Mar 10, 2017, 00:23 UTC
Message-ID
<85fefe0a-fe0e-cf1b-78c3-a8e2e85f53c2@gmail.com>
In-Reply-To
<xmqqvayruvwk.fsf@gitster.mtv.corp.google.com>
Hi Junio,
On 23/08/2016 21:28, Junio C Hamano wrote:
Show 19 quoted lines
> Joshua Phillips <jphillips@imap.cc> writes:
> > I've found a case where git pull --rebase discards commits in my branch
> > if the remote-tracking branch was rewound (and the remote tracking
> > branch's reflog contains my branch's latest commit). This is due to
> > git-pull's usage of git merge-base --fork-point.
> >
> > On one hand, this behaviour might be correct since the remote repository
> > essentially removed that commit from master by 'reset --hard'. On the
> > other hand, I was surprised that git pull --rebase discarded a commit in
> > my branch.
> 
> Yup, that sounds like a bad way to handle the situation.  After all,
> the upstream may have first accepted your first attempt, and then
> decided that it was premature and rewound it, expecting you to give
> an improved reroll.  But I also agree with you that it may be
> correct to drop it because the upstream already rejected it.
> 
> Since Git cannot tell between these two cases, we should play safer
> than what the current code does, I would think.

Were there any news in this regards so far? Would it be (more) sensible/safe to report the dropped commits, too? Something like:

  Dropping: Commit B
  Applying: Commit X
  Applying: Commit Y

... where "Applying: *" are standard "git rebase" output lines, and "Dropping: *" a newly proposed one (example graphs (1.1) to (1.3) shown below[1]).

That said, applied commits might even be considered pretty uninteresting here (as they`re kept/transferred over anyway), a noise drowning what otherwise might be really important - the dropped/lost ones...?

It does feel a bit scary learning that you may _silently_ lose commits, especially as --fork-point is used by default for both vanilla `git rebase` and `git pull --rebase`.

P.S. As a relatively new user, I actually just got aware of this behavior from another, recently posted e-mail[2], having me investigate further, yet thought replying here might be better as it got some attention already (adding author of that other e-mail, Laszlo Kiss, to Cc).

Regards, Buga

[1] Example graphs:
  (1.1) ---A---B (master)
                \
                 X---Y (topic)
  (1.2)      C---D (master)
            /
        ---A---B
                \
                 X---Y (topic)
  (1.3)            X'---Y' (topic)
                  /
             C---D (master)
            /
        ---A
  Note that I didn`t use "origin/master" but just "master" on purpose, 
  as the branch being tracked doesn`t have to be a remote one, making 
  the lost local commits confusion even greater.
[2] https://public-inbox.org/git/CAO0LFki4PN8zz2xpoSpjTHJGS=NG_suQYR27EcmzEMiaCw9kuA@mail.gmail.com/
Previous: Junio C Hamano
Message 3 of 3 in “Possible bug: git pull --rebase discards local commits”
  1. Joshua PhillipsAug 23, 2016
  2. Junio C HamanoAug 23, 2016
  3. Igor DjordjevicMar 10, 2017

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.