#!/bin/sh | |
test_description='cherry picking and reverting a merge | |
b---c | |
/ / | |
initial---a | |
' | |
. ./test-lib.sh | |
test_expect_success setup ' | |
>A && | |
>B && | |
git add A B && | |
git commit -m "Initial" && | |
git tag initial && | |
git branch side && | |
echo new line >A && | |
git commit -m "add line to A" A && | |
git tag a && | |
git checkout side && | |
echo new line >B && | |
git commit -m "add line to B" B && | |
git tag b && | |
git checkout master && | |
git merge side && | |
git tag c | |
' | |
test_expect_success 'cherry-pick a non-merge with -m should fail' ' | |
git reset --hard && | |
git checkout a^0 && | |
! git cherry-pick -m 1 b && | |
git diff --exit-code a -- | |
' | |
test_expect_success 'cherry pick a merge without -m should fail' ' | |
git reset --hard && | |
git checkout a^0 && | |
! git cherry-pick c && | |
git diff --exit-code a -- | |
' | |
test_expect_success 'cherry pick a merge (1)' ' | |
git reset --hard && | |
git checkout a^0 && | |
git cherry-pick -m 1 c && | |
git diff --exit-code c | |
' | |
test_expect_success 'cherry pick a merge (2)' ' | |
git reset --hard && | |
git checkout b^0 && | |
git cherry-pick -m 2 c && | |
git diff --exit-code c | |
' | |
test_expect_success 'cherry pick a merge relative to nonexistent parent should fail' ' | |
git reset --hard && | |
git checkout b^0 && | |
! git cherry-pick -m 3 c | |
' | |
test_expect_success 'revert a non-merge with -m should fail' ' | |
git reset --hard && | |
git checkout c^0 && | |
! git revert -m 1 b && | |
git diff --exit-code c | |
' | |
test_expect_success 'revert a merge without -m should fail' ' | |
git reset --hard && | |
git checkout c^0 && | |
! git revert c && | |
git diff --exit-code c | |
' | |
test_expect_success 'revert a merge (1)' ' | |
git reset --hard && | |
git checkout c^0 && | |
git revert -m 1 c && | |
git diff --exit-code a -- | |
' | |
test_expect_success 'revert a merge (2)' ' | |
git reset --hard && | |
git checkout c^0 && | |
git revert -m 2 c && | |
git diff --exit-code b -- | |
' | |
test_expect_success 'revert a merge relative to nonexistent parent should fail' ' | |
git reset --hard && | |
git checkout c^0 && | |
! git revert -m 3 c && | |
git diff --exit-code c | |
' | |
test_done |