From 9b5abf76ea159733eed00a4e46cedba92b3366a2 Mon Sep 17 00:00:00 2001 From: teutat3s Date: Sun, 2 Jul 2023 14:49:47 +0200 Subject: [PATCH] devshell: stash only unstaged changes in pre-commit hook --- shell/hooks/pre-commit.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/shell/hooks/pre-commit.sh b/shell/hooks/pre-commit.sh index 45efec25..19c5384e 100755 --- a/shell/hooks/pre-commit.sh +++ b/shell/hooks/pre-commit.sh @@ -8,8 +8,14 @@ else fi # Stash only unstaged changes, keeping staged changes +# We have to stash two times, because: +# --keep-index also stashes the staged changes. +# The staged changes end up in both the stage AND the stash. +# https://overflow.hostux.net/questions/7650797/how-to-stash-only-unstaged-changes-in-git#60875082 old_stash=$(git rev-parse --quiet --verify refs/stash) -git stash push --quiet --keep-index -m 'Unstaged changes before pre-commit hook' +git stash push --quiet --staged --message "Staged changes before pre-commit hook" +git stash push --quiet --keep-index --message "Unstaged changes before pre-commit hook" +git stash pop --quiet --index "stash@{1}" new_stash=$(git rev-parse --quiet --verify refs/stash) diff="git diff-index --name-only --cached $against --diff-filter d"