rebase -i: fix interrupted squashing
When a squashing merge failed, the first commit would not be replaced, due to "git reset --soft" being called with an unmerged index. Noticed by Uwe Kleine-König. Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
7ab3cc70a6
commit
fb47cfbd59
@ -260,8 +260,8 @@ do_next () {
|
||||
esac
|
||||
|
||||
failed=f
|
||||
pick_one -n $sha1 || failed=t
|
||||
output git reset --soft HEAD^
|
||||
pick_one -n $sha1 || failed=t
|
||||
author_script=$(get_author_ident_from_commit $sha1)
|
||||
echo "$author_script" > "$DOTEST"/author-script
|
||||
case $failed in
|
||||
|
@ -221,4 +221,34 @@ test_expect_success 'multi-squash only fires up editor once' '
|
||||
test 1 = $(git show | grep ONCE | wc -l)
|
||||
'
|
||||
|
||||
test_expect_success 'squash works as expected' '
|
||||
for n in one two three four
|
||||
do
|
||||
echo $n >> file$n &&
|
||||
git add file$n &&
|
||||
git commit -m $n
|
||||
done &&
|
||||
one=$(git rev-parse HEAD~3) &&
|
||||
FAKE_LINES="1 squash 3 2" git rebase -i HEAD~3 &&
|
||||
test $one = $(git rev-parse HEAD~2)
|
||||
'
|
||||
|
||||
test_expect_success 'interrupted squash works as expected' '
|
||||
for n in one two three four
|
||||
do
|
||||
echo $n >> conflict &&
|
||||
git add conflict &&
|
||||
git commit -m $n
|
||||
done &&
|
||||
one=$(git rev-parse HEAD~3) &&
|
||||
! FAKE_LINES="1 squash 3 2" git rebase -i HEAD~3 &&
|
||||
(echo one; echo two; echo four) > conflict &&
|
||||
git add conflict &&
|
||||
! git rebase --continue &&
|
||||
echo resolved > conflict &&
|
||||
git add conflict &&
|
||||
git rebase --continue &&
|
||||
test $one = $(git rev-parse HEAD~2)
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user