git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* finding the merge of two or more commits
@ 2009-10-29 21:12 E R
  2009-10-29 21:34 ` Avery Pennarun
  2009-10-30 23:38 ` Jakub Narebski
  0 siblings, 2 replies; 4+ messages in thread
From: E R @ 2009-10-29 21:12 UTC (permalink / raw)
  To: git

Hi,

Given two commits c1 and c2, is it possible to ask git if there are
any commits in the repository that were created by either a sequence
of commands like:

git checkout c1
git merge c2

or:

git checkout c2
git merge c1

with any required conflict resolution?

That is, I don't want to merge c1 and c2 myself, but I want to know if
someone else has merged c1 and c2, performed any conflict resolution
and committed the result.

Thanks,
ER

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: finding the merge of two or more commits
  2009-10-29 21:12 finding the merge of two or more commits E R
@ 2009-10-29 21:34 ` Avery Pennarun
  2009-10-30 18:04   ` Jeff King
  2009-10-30 23:38 ` Jakub Narebski
  1 sibling, 1 reply; 4+ messages in thread
From: Avery Pennarun @ 2009-10-29 21:34 UTC (permalink / raw)
  To: E R; +Cc: git

On Thu, Oct 29, 2009 at 5:12 PM, E R <pc88mxer@gmail.com> wrote:
> That is, I don't want to merge c1 and c2 myself, but I want to know if
> someone else has merged c1 and c2, performed any conflict resolution
> and committed the result.

Try this:

(git branch -a --contains c1; git branch -a --contains c2) | sort | uniq -d

It's not exactly pretty, but it works.

Have fun,

Avery

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: finding the merge of two or more commits
  2009-10-29 21:34 ` Avery Pennarun
@ 2009-10-30 18:04   ` Jeff King
  0 siblings, 0 replies; 4+ messages in thread
From: Jeff King @ 2009-10-30 18:04 UTC (permalink / raw)
  To: Avery Pennarun; +Cc: E R, git

On Thu, Oct 29, 2009 at 05:34:45PM -0400, Avery Pennarun wrote:

> On Thu, Oct 29, 2009 at 5:12 PM, E R <pc88mxer@gmail.com> wrote:
> > That is, I don't want to merge c1 and c2 myself, but I want to know if
> > someone else has merged c1 and c2, performed any conflict resolution
> > and committed the result.
> 
> Try this:
> 
> (git branch -a --contains c1; git branch -a --contains c2) | sort | uniq -d
> 
> It's not exactly pretty, but it works.

That will tell you whether any branch contains both of them, which is
not exactly what the original poster asked for (though it may have been
what he meant :) ). To see if there is a specific merge of those two
commits, you can do:

  git log --all --format='%H %P' | grep " $c1" | grep " $c2" | cut -d' ' -f1

-Peff

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: finding the merge of two or more commits
  2009-10-29 21:12 finding the merge of two or more commits E R
  2009-10-29 21:34 ` Avery Pennarun
@ 2009-10-30 23:38 ` Jakub Narebski
  1 sibling, 0 replies; 4+ messages in thread
From: Jakub Narebski @ 2009-10-30 23:38 UTC (permalink / raw)
  To: E R; +Cc: git

E R <pc88mxer@gmail.com> writes:

> Given two commits c1 and c2, is it possible to ask git if there are
> any commits in the repository that were created by either a sequence
> of commands like:
> 
> git checkout c1
> git merge c2
> 
> or:
> 
> git checkout c2
> git merge c1
> 
> with any required conflict resolution?
> 
> That is, I don't want to merge c1 and c2 myself, but I want to know if
> someone else has merged c1 and c2, performed any conflict resolution
> and committed the result.

I assume that commits c1 and c2 are not one ancestor of the other (are
not in fast-forward relation).

Translating your question into question about DAG of revisions, you
want to check if there is branch for which both c1 and c2 are
reachable from:

  c1sha=$(git rev-parse c1)
  c2sha=$(git rev-parse c2)
  git for-each-ref --format="%(refname)" refs/heads/ |
  while read refname
  do 
      b1=$(git merge-base c1 $refname)
      b2=$(git merge-base c2 $refname)
      if [ "$b1" = "$c1sha" -a "$b2" = "$c2sha" ]
      then
          print ${refname#refs/heads/}
      fi
  done

Instead of comparing git-merge-base with SHA-1 of c1 and c2
respoectively, you can count commits:

  git for-each-ref --format="%(refname)" refs/heads/ |
  while read refname
  do 
      count1=$(git rev-list c1..$refname | wc -l)
      count2=$(git rev-list c2..$refname | wc -l)
      if [ "$count1" > 0  -a  "$count2" > 0 ]
      then
          print ${refname#refs/heads/}
      fi
  done

Not tested!

-- 
Jakub Narebski
Poland
ShadeHawk on #git

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2009-10-30 23:40 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-29 21:12 finding the merge of two or more commits E R
2009-10-29 21:34 ` Avery Pennarun
2009-10-30 18:04   ` Jeff King
2009-10-30 23:38 ` Jakub Narebski

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).