зеркало из https://github.com/microsoft/git.git
am --abort: keep unrelated commits since the last failure and warn
After making commits (either by pulling or doing their own work) after a failed "am", the user will be reminded by next "am" invocation that there was a failed "am" that the user needs to decide to resolve or to get rid of the old "am" attempt. The "am --abort" option was meant to help the latter. However, it rewinded the HEAD back to the beginning of the failed "am" attempt, discarding commits made (perhaps by mistake) since. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
05bb5a2584
Коммит
7b3b7e3758
27
git-am.sh
27
git-am.sh
|
@ -68,9 +68,31 @@ sq () {
|
|||
|
||||
stop_here () {
|
||||
echo "$1" >"$dotest/next"
|
||||
git rev-parse --verify -q HEAD >"$dotest/abort-safety"
|
||||
exit 1
|
||||
}
|
||||
|
||||
safe_to_abort () {
|
||||
if test -f "$dotest/dirtyindex"
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if ! test -s "$dotest/abort-safety"
|
||||
then
|
||||
return 0
|
||||
fi
|
||||
|
||||
abort_safety=$(cat "$dotest/abort-safety")
|
||||
if test "z$(git rev-parse --verify -q HEAD)" = "z$abort_safety"
|
||||
then
|
||||
return 0
|
||||
fi
|
||||
echo >&2 "You seem to have moved HEAD since the last 'am' failure."
|
||||
echo >&2 "Not rewinding to ORIG_HEAD"
|
||||
return 1
|
||||
}
|
||||
|
||||
stop_here_user_resolve () {
|
||||
if [ -n "$resolvemsg" ]; then
|
||||
printf '%s\n' "$resolvemsg"
|
||||
|
@ -419,10 +441,11 @@ then
|
|||
exec git rebase --abort
|
||||
fi
|
||||
git rerere clear
|
||||
test -f "$dotest/dirtyindex" || {
|
||||
if safe_to_abort
|
||||
then
|
||||
git read-tree --reset -u HEAD ORIG_HEAD
|
||||
git reset ORIG_HEAD
|
||||
}
|
||||
fi
|
||||
rm -fr "$dotest"
|
||||
exit ;;
|
||||
esac
|
||||
|
|
|
@ -62,4 +62,13 @@ do
|
|||
|
||||
done
|
||||
|
||||
test_expect_success 'am --abort will keep the local commits intact' '
|
||||
test_must_fail git am 0004-*.patch &&
|
||||
test_commit unrelated &&
|
||||
git rev-parse HEAD >expect &&
|
||||
git am --abort &&
|
||||
git rev-parse HEAD >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Загрузка…
Ссылка в новой задаче