Re: [BUG] Highly inconsistent diff UI
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 24, 2013, 21:23 UTC
- Message-ID
- <7vvc7baahc.fsf@alter.siamese.dyndns.org>
- In-Reply-To
- <CALkWK0m5Q_e3q6Yg94-K+jU_SS7ovR2wnz-_Nr3cMz_YM=SMDQ@mail.gmail.com>
Ramkumar Ramachandra <artagnon@gmail.com> writes:
Show 5 quoted lines
> Sorry I wasn't clear. A~B = $(git merge-base A B) B to diff and $(git > merge-base A B)..B to log. > > Basically, I want to be able to do git log master~rebase.autostash > (without having to rebase).
How is it different from "git log master..rebase.autostash"?
git log A..B
is already a perfectly fine way to spell your "A~B", which is
git log B --not $(git merge-base --all A B)
when written in longhand [*1*], no?
So I do not think your A~B helps "log".
It does not help "diff" either, because we already have A...B and we are not going to remove it (people are used to what it means).
So I think your A~B is still a solution that is looking for a problem.
[Footnote]
*1* You need to understand what merge-base is in order to analyse
the equivalence of these two. A..B asks for those that are
reachable from B that are not reachable from A. What does the
other form ask, by saying "ones that can be reached from B but
exclude the ones that are reachable from any merge base of A and
B"? On the history leading to A, there are two kinds of commits:
those that are not reachable from B and those that are. The
ones closer to A may not be reachable from B but if you dig the
history starting from A and keep finding ancestors, you will
eventually hit one that can be reached from B. Once you hit
such a commit, everything beyond that point are reachable from
both A and B. E.g. ---o---*---a---a---a---A
\
b---b---B And we call that a merge base between A and B (e.g. '*'). Any
ancestor of a merge base, e.g. 'o', is reachable from A and is
excluded from "A..B".