Hi Junio,
On 23/08/2016 21:28, Junio C Hamano wrote:
> Joshua Phillips <[email protected]> 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_suqyr27ecmzemiacw9...@mail.gmail.com/