Re: Find out on which branch a commit was originally made

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 09/19/10 11:45, Stefan Haller wrote:
> Artur Skawina <art.08.09@xxxxxxxxx> wrote:
> 
>> On 09/18/10 17:26, Stefan Haller wrote:
>>> Ãvar ArnfjÃr? Bjarmason <avarab@xxxxxxxxx> wrote:
>>>>                      A---B---C topic
>>>>                     /         \
>>>>                D---E---F---G---H master
>>
>>> The question is the same though: if I hit commit B while blaming, how do
>>> I know what topic it was a part of?  For that, I need to find commit H
>>> which will tell me, right?  How do I do that?
>>
>> git rev-list --ancestry-path --merges --reverse B..master --format=oneline
> 
> Thanks, this is helpful.  (However, my co-workers will probably laugh at
> me if I suggest they remember a command such as this for what they think
> should be a very simple operation.)

An alias such as "git show-merges-since B" might help.

> There's a problem though for commits that are far back in history:
> 
>                A---B---C topic
>               /         \
>          D---E---F---G---H---I---J---K---L---M---N master
>                                   \         /
>                                    O---P---Q another-topic
> 
> Your command also shows M, which is not interesting at all in this

But you're only interested in the name of the original topic branch,
right? Then the first merge will tell you that; I omitted "| head -1"
from the cmdline above, just in case the history isn't as simple as
in this graph.

> context.  Ideally it should stop at the first command that's common to
> topic and master.  Is there an easy way to achieve that?

Well, as you've explicitly deleted the 'topic' ref, how is git supposed
to find it?

The above "git rev-list" will give you either the merge w/ the info you
are looking for, or a list of merge commits that you'll have to filter
(grep etc) to find the first one containing the answer.

>> IOW if you know you could still need the old branch info, make an alias
>> that doesn't actually delete the branch after merging, but moves the ref
>> away, eg 'topic-name' -> "merged/topic-name" or just adds a
>> "merged/topic-name" tag. Then simply checking from which "merged/*"
>> branch/tag the offending commit is reachable would be enough.
> 
> Same problem here: this also shows all branches that were created and
> merged after the original topic was merged.  (In the example above, it
> will also list another-topic.)  This makes it pretty much impossible to

Yes. "git merge-base master another-topic" would return 'J' and if 'B'
is still reachable from 'J' then 'another-topic' isn't the answer and
you have to keep looking. So it's a bit more complicated.

artur
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]