Re: [PATCHv2 2/2] pull: support rebased upstream + fetch + pull --rebase
- From
- Santi Béjar <santi@agolina.net>
- Date
- Jul 16, 2009, 23:18 UTC
- Message-ID
- <adf1fd3d0907161618o61ee4b58of25659f8c36420f7@mail.gmail.com>
- In-Reply-To
- <7vhbxc8inp.fsf@alter.siamese.dyndns.org>
2009/7/16 Junio C Hamano <gitster@pobox.com>:
Show 23 quoted lines
> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes: > >> How about >> >> oldremoteref="$(git rev-list --boundary HEAD --not \ >> $(git rev-list -g $remoteref | sed 's/$/^@/') | >> sed -e '/^[^-]/d' -e q)" >> >> Explanation: the "git rev-list -g $remoteref" lists the previous commits >> the remote ref pointed to, and the ^@ appended to them means all their >> parents. Now, the outer rev-list says to take everything in HEAD but >> _not_ in those parents, showing the boundary commits. The "sed" call >> lists the first such boundary commit (which must, by construction, be one >> of the commits shown by the first rev-list). > > Hmm, I am not sure about that "(which must..." part. When you have > > Y---X > / > B---o---o---o---H > > wouldn't "rev-list --boundary H --not X^@" give B, not X nor Y? >
$git rev-list --boundary H --not X and $git rev-list --boundary H --not X^@
return the same output in this case: o o o -B
In this case the correct command is without ^@, because you want the commits in the reflog as boundary commits.
In the simpler and usual case, without a rebased upstream:
z---B---o---o---o---H
B=upstream@{0}$git rev-list --boundary H --not B^@ o o o B -z
and:
$git rev-list --boundary H --not B o o o -B
Also in the rebased upstream case:
Y---X / z---B---o---o---o---H
X=upstream@{0} B=upstream@{1}
$git rev-list --boundary H --not X^@ B^@ o o o B -z
and:
$git rev-list --boundary H --not X B o o o -B
HTH, Santi