Re: Find out on which branch a commit was originally made
- From
- Seth Robertson <in-gitvger@baka.org>
- Date
- Sep 19, 2010, 22:03 UTC
- Message-ID
- <201009192203.o8JM39PE011067@no.baka.org>
- In-Reply-To
- <201009192030.21659.robin.rosenberg@dewire.com>
Show 5 quoted lines
>>> A---B---C topic >>> / \ >>> D---E---F---G---H---I---J---K---L---M---N master >>> \ / >>> O---P---Q another-topic
>> 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.
> 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. [...]
The provided command actually doesn't work for me for all cases. It works for the simple case of "B", but does not work for "F", because F saw merge H & M. I think we need --not --first-parent, except that doesn't actually work in this case either. However, if we get the full --first-parent rev-list and look for our commit, that works. This is incredibly painful, though.
---------------------------------------------------------------------- #!/bin/sh TARGET=`git rev-list -n 1 $1` git branch -a --contains $1 | sed 's/^\** *//' | grep -v ' -> ' | while read br; do if git rev-list --first-parent $br | grep -q "$TARGET"; then echo $br fi done ----------------------------------------------------------------------
-Seth Robertson