Re: What's cooking in git.git (Apr 2012, #05; Thu, 12)
- From
Michal Kiedrowicz <michal.kiedrowicz@gmail.com>
- Date
- Apr 16, 2012, 06:26 UTC
- Message-ID
- <20120416082641.5d239ef6@mkiedrowicz.ivo.pl>
Junio C Hamano <gitster@pobox.com> wrote:
Show 5 quoted lines
> * lt/octopus-simplify (2012-04-12) 1 commit > - Make 'git merge' simplify parents earlier > > Octopus merge strategy did not reduce heads that are recorded in the > final commit. This was done off-list.
Heh, this seems to fix the issue I reported in [1], except... it doesn't work for the testcase I posted :). The problem is that this commit makes Git 'fast-forward' to the first commit from remoteheads, not from the reduced heads. See:
$ git init /tmp/merge Initialized empty Git repository in /tmp/merge/.git/ $ cd /tmp/merge $ echo a>>a && git add a && git commit -m first [master (root-commit) 7422615] first 1 file changed, 1 insertion(+) create mode 100644 a $ echo a>>a && git add a && git commit -m second [master 0ba02e5] second 1 file changed, 1 insertion(+) $ echo a>>a && git add a && git commit -m third [master 9bd11ac] third 1 file changed, 1 insertion(+) $ git checkout master~2 HEAD is now at 7422615... first # This is OK: $ git merge master master~1 Updating 7422615..9bd11ac Fast-forward a | 2 ++ 1 file changed, 2 insertions(+) $ git checkout master~2 Previous HEAD position was 9bd11ac... third HEAD is now at 7422615... first # This is not OK: $ git merge master~1 master Updating 7422615..0ba02e5 Fast-forward a | 1 + 1 file changed, 1 insertion(+)
Ths following patch fixes that.
[1] http://permalink.gmane.org/gmane.comp.version-control.git/190625
Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com> (if this fix need a signed-off) ---
diff --git a/builtin/merge.c b/builtin/merge.c index f5947b9..075c99b 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -1388,13 +1388,13 @@ int cmd_merge(int argc, const char **argv, const char *prefix) if (verbosity >= 0) printf(_("Updating %s..%s\n"), hex, - find_unique_abbrev(remoteheads->item->object.sha1, + find_unique_abbrev(parents->item->object.sha1, DEFAULT_ABBREV)); strbuf_addstr(&msg, "Fast-forward"); if (have_message) strbuf_addstr(&msg, " (no commit created; -m option ignored)"); - commit = remoteheads->item; + commit = parents->item; if (!commit) { ret = 1; goto done;