Re: [PATCH] add receive.denyNonFastforwards config variable

From: Johannes Schindelin <>
Date: 2006-09-21 19:08:02

On Wed, 20 Sep 2006, Junio C Hamano wrote:

> Jeff King <> writes:
> >>     X - a - b - c - Y
> >>   /           /
> >> o - d - e - f
> >
> > In your example, git-merge-base X Y returns X. In fact, I could only get
> > one merge base out of git-merge-base --all. I tried looking in the tests
> > to find a case that produced multiple merge bases, but I was unable to
> > find one. Is there an example floating around somewhere?
> There are quite a few in git.git itself.  In the recent history,
> this counts 42, the answer to everything.
> #!/bin/sh
> LF='
> '
> git rev-list --parents |
> while read it p1 p2 octo
> do
> 	case "$p2" in '') continue ;; esac
>         mb=`git merge-base --all "$p1" "$p2"`

At this point you should also check if $p2 is in $mb.

> 	case "$mb" in ?*"$LF"?*) echo "$p1 $p2" : $mb ;;
>         esac
> done

The question was, if there is a fast-forward with more than one merge 
base, i.e. if the loop we jump^H^H^H^Hdo over bases is necessary.

And no, I am not aware of any such example.

Probably because X would mark all ancestors (_including_ all other 
possible merge bases) as uninteresting.

Therefore, I am convinced that there is no fast-forward returning more 
than one merge base. It is technically impossible. And thus, our loop is 
not necessary, but what the heck.


To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to
More majordomo info at
Received on Thu Sep 21 19:08:13 2006

This archive was generated by hypermail 2.1.8 : 2006-09-21 19:08:56 EST