
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 add 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 Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
93 lines
1.7 KiB
Bash
Executable File
93 lines
1.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
test_description='merge fast-forward and up to date'
|
|
|
|
. ./test-lib.sh
|
|
|
|
test_expect_success setup '
|
|
>file &&
|
|
git add file &&
|
|
test_tick &&
|
|
git commit -m initial &&
|
|
git tag c0 &&
|
|
|
|
echo second >file &&
|
|
git add file &&
|
|
test_tick &&
|
|
git commit -m second &&
|
|
git tag c1 &&
|
|
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' '
|
|
|
|
git reset --hard c1 &&
|
|
test_tick &&
|
|
git merge -s recursive c0 &&
|
|
expect=$(git rev-parse c1) &&
|
|
current=$(git rev-parse HEAD) &&
|
|
test "$expect" = "$current"
|
|
|
|
'
|
|
|
|
test_expect_success 'merge -s recursive fast-forward' '
|
|
|
|
git reset --hard c0 &&
|
|
test_tick &&
|
|
git merge -s recursive c1 &&
|
|
expect=$(git rev-parse c1) &&
|
|
current=$(git rev-parse HEAD) &&
|
|
test "$expect" = "$current"
|
|
|
|
'
|
|
|
|
test_expect_success 'merge -s ours up-to-date' '
|
|
|
|
git reset --hard c1 &&
|
|
test_tick &&
|
|
git merge -s ours c0 &&
|
|
expect=$(git rev-parse c1) &&
|
|
current=$(git rev-parse HEAD) &&
|
|
test "$expect" = "$current"
|
|
|
|
'
|
|
|
|
test_expect_success 'merge -s ours fast-forward' '
|
|
|
|
git reset --hard c0 &&
|
|
test_tick &&
|
|
git merge -s ours c1 &&
|
|
expect=$(git rev-parse c0^{tree}) &&
|
|
current=$(git rev-parse HEAD^{tree}) &&
|
|
test "$expect" = "$current"
|
|
|
|
'
|
|
|
|
test_expect_success 'merge -s subtree up-to-date' '
|
|
|
|
git reset --hard c1 &&
|
|
test_tick &&
|
|
git merge -s subtree c0 &&
|
|
expect=$(git rev-parse c1) &&
|
|
current=$(git rev-parse HEAD) &&
|
|
test "$expect" = "$current"
|
|
|
|
'
|
|
|
|
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
|