Re: What's cooking in git.git (Apr 2012, #05; Thu, 12)
From: Michal Kiedrowicz <hidden>
Date: 2016-06-15 22:53:36
Subsystem:
the rest · Maintainer:
Linus Torvalds
Junio C Hamano [off-list ref] wrote:
* 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 <redacted> (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;