From: Kristoffer Haugsbakk Date: Tue, 03 Nov 2026 20:13:37 GMT Subject: Re: Interaction between pre-commit hook and git commit Message-ID: In-Reply-To: On Tue, Nov 3, 2026, at 20:58, Kevin Lyles wrote: > Hello, folks, > > The documentation for the pathspec option of the commit command claims: > "The contents of these files are also staged for the next commit on top > of what have been staged before." > However, that appears to only be true if the pre-commit hook doesn't > modify the index contents. > > Here's an example pre-commit script: > #!/bin/sh > > git diff --staged --name-only | while read -r file > do > { > git cat-file blob :"$file" > echo '# Extra text' > } | > { > echo -n "100644 blob " > echo -n $(git hash-object -w -t blob --path "$file" --stdin) > echo -e "\t$file" > } | > git update-index --index-info > echo '# Extra text' >> "$file" > done > > This always appends "# Extra text" to the end of any staged files, in > both the index and the worktree. It serves to illustrate the issue, > without getting into the weeds of what my pre-commit hook is doing. > Suffice to say that my hook is (sometimes) modifying files in both the > index (to make sure the updated contents are committed) and the > worktree (to reduce spurious diffs when file contents are changed). >[snip] Reading githooks documentation for pre-commit. To me it reads like the use case is validation/checking, not any mutation. This doesn't sound like a reasonable use case.