[BUG] git-merge-octopus creates an empty merge commit with one parent
- From
Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
- Date
- Feb 13, 2012, 11:48 UTC
- Message-ID
- <1329133736-20817-1-git-send-email-michal.kiedrowicz@gmail.com>
This happens when git merge is run to merge multiple commits that are descendants of current HEAD (or are HEAD). We've hit this while updating master to origin/master but accidentaly we called (while being on master):
$ git merge master origin/master
Here is a minimal testcase:
$ git init a
$ cd a
$ echo a>a
$ git commit -minitial
$ echo b>a
$ git add a
$ git commit -msecond
$ git checkout master^
$ git merge master master Fast-forwarding to: master Already up-to-date with master Merge made by the 'octopus' strategy. a | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
$ git cat-file commit HEAD tree eebfed94e75e7760540d1485c740902590a00332 parent bd679e85202280b263e20a57639a142fa14c2c64 author Michał Kiedrowicz <michal.kiedrowicz@gmail.com> 1329132996 +0100 committer Michał Kiedrowicz <michal.kiedrowicz@gmail.com> 1329132996 +0100
Merge branches 'master' and 'master' into HEAD
... and below is a patch that adds a testcase to Git's testsuite.
I would expect `git merge master master` to just 'Fast forward'.
Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com> --- t/t6028-merge-up-to-date.sh | 17 ++++++++++++++++- 1 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/t/t6028-merge-up-to-date.sh b/t/t6028-merge-up-to-date.sh index a91644e..824fca5 100755 --- a/t/t6028-merge-up-to-date.sh +++ b/t/t6028-merge-up-to-date.sh @@ -16,7 +16,12 @@ test_expect_success setup ' test_tick && git commit -m second && git tag c1 && - git branch test + git branch test && + echo third >file && + git add file && + test_tick && + git commit -m third && + git tag c2 ' test_expect_success 'merge -s recursive up-to-date' ' @@ -74,4 +79,14 @@ test_expect_success 'merge -s subtree up-to-date' ' ' +test_expect_failure 'merge fast-forward octopus' ' + + git reset --hard c0 && + test_tick && + git merge c1 c2 + expect=$(git rev-parse c2) && + current=$(git rev-parse HEAD) && + test "$expect" = "$current" +' + test_done
-- 1.7.9.rc2.155.g2e96