git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Artur Skawina <art.08.09@gmail.com>
To: Stefan Haller <lists@haller-berlin.de>
Cc: "Ævar Arnfjör? Bjarmason" <avarab@gmail.com>, git@vger.kernel.org
Subject: Re: Find out on which branch a commit was originally made
Date: Sun, 19 Sep 2010 18:38:28 +0200	[thread overview]
Message-ID: <4C963C84.2050608@gmail.com> (raw)
In-Reply-To: <1jp2pkw.1s4r5br1xvl05eM%lists@haller-berlin.de>

On 09/19/10 16:08, Stefan Haller wrote:
> Stefan Haller <lists@haller-berlin.de> wrote:
> 
>> Artur Skawina <art.08.09@gmail.com> wrote:
>>
>>> On 09/18/10 17:26, Stefan Haller wrote:
>>>> Ævar Arnfjör? Bjarmason <avarab@gmail.com> 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.)
>>
>> 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
>> context.  Ideally it should stop at the first command that's common to
>> topic and master.
> 
> No, that's not what I need either.  After thinking about it more, I
> think what I want is "of all merges in the ancestry path from B to
> master, show only those whose first parent can't reach B."  The result
> is the list of all merges that were involved in bringing B to master.
> 
> Here's what I came up with:
> 
> #!/bin/sh
> 
> git rev-list --ancestry-path --merges --reverse "$1".."${2-master}" \
>   | while read ref
> do
>   if [ -z "$(git rev-list --ancestry-path "$1".."$ref"^)" ]
>   then
>     git --no-pager log -1 --pretty=oneline "$ref"
>   fi
> done
> 
> It's pretty inefficient, but seems to get the job done. Is there a
> smarter way to achieve the same?

This would work, and i don't see a way to optimize it in git-speak,
given that you don't want to see any extra trailing merges. At least,
not if it's supposed to be generic; consider a case where the 'topic'
merges another 'subtopic' and is then merged into a 'supertopic', which
is then merged to 'master'. Maybe somebody else has an idea?

For me, this seems like overkill, the merge list given by "git rev-list"
should be more than enough to figure out which branch the commit came
from. And if not - either your shell script or walking the history
("--parents" option) w/ a script would do. But i can't even imagine how
such a history would have to look like... 

artur

  reply	other threads:[~2010-09-19 16:38 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-09-18  9:19 Find out on which branch a commit was originally made Stefan Haller
2010-09-18  9:58 ` Ævar Arnfjörð Bjarmason
2010-09-18 10:02   ` Ævar Arnfjörð Bjarmason
2010-09-18 11:28   ` Tor Arntsen
2010-09-18 15:26   ` Stefan Haller
2010-09-18 16:41     ` Artur Skawina
2010-09-19  9:45       ` Stefan Haller
2010-09-19 12:54         ` Clemens Buchacher
2010-09-19 14:03         ` Artur Skawina
2010-09-19 14:08         ` Stefan Haller
2010-09-19 16:38           ` Artur Skawina [this message]
2010-09-19 18:30     ` Robin Rosenberg
2010-09-19 22:03       ` Seth Robertson
2010-09-19 23:12         ` Artur Skawina
2010-09-19 23:54           ` Seth Robertson
2010-09-20  1:31             ` Artur Skawina
2010-09-20  5:47               ` Seth Robertson
2010-09-20  8:12                 ` Stefan Haller
2010-09-20 10:58                   ` Artur Skawina
2010-09-20 15:49                     ` Artur Skawina
2010-09-21  0:15                       ` Seth Robertson
2010-09-21  2:12                         ` Artur Skawina
2010-09-22 16:35                           ` ANNOUNCE git-what-branch (was Re: Find out on which branch a commit was originally made) Seth Robertson
2010-09-22 20:27                             ` Artur Skawina
2010-09-22 23:26                               ` Find out on which branch a commit was originally made) (was ANNOUNCE git-what-branch) Seth Robertson
2010-09-23 13:14                                 ` Stephen Bash
2010-09-23 13:26                                   ` Ævar Arnfjörð Bjarmason
2010-09-23 21:32                                     ` Artur Skawina
2010-09-24  1:33                                       ` Artur Skawina
2010-09-24 20:57                                       ` Seth Robertson
2010-09-23 14:27                                   ` Seth Robertson
2010-09-20 18:20                     ` Find out on which branch a commit was originally made Stefan Haller
2010-09-24 18:26 ` Bryan Drewery

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C963C84.2050608@gmail.com \
    --to=art.08.09@gmail.com \
    --cc=avarab@gmail.com \
    --cc=git@vger.kernel.org \
    --cc=lists@haller-berlin.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).