git/list[1] front-page[2] threads[3] people[4] search[5] about
 

precommit hook broken with "git commit <filename>"

From
C. Scott Ananian <cscott@laptop.org>
Date
Apr 12, 2011, 15:17 UTC
Message-ID
<BANLkTimB=TZ1gP-18ywbZUOZSbDamkRwCg@mail.gmail.com>
It appears that "git commit <filename>" breaks the git precommit hook.
 Every other git command updates the index to make the
commit-about-to-be-made before running the precommit hook, and indeed
the 'pre-commit.sample' distributed with git assumes that the index
reflects the commit.  However, in the case of "git commit <filename>"
the man page states "the commit will ignore changes staged in the
index, and instead record the current content of the listed files
(which must already be known to git)".

This seems like a bug. The precommit hook does not know (and has no apparent way of knowing) the contents of the commit-in-progress! If there is a workaround, it should be incorporated into the 'pre-commit.sample', which otherwise displays the same bug; to wit, you can inadvertently commit changes which would fail the pre-commit check by simply using the 'git commit <filename>' form. Worse/alternatively, bad files already existing in the index can block the commit of "good" files named on the command line.

The fix appears clear: "git commit <filename>..." should do the
equivalent of stashing the current index, adding the named files,
*then* run the precommit hook, then do the commit, before restoring
the stashed index.  That would provide a consistent state for the
precommit hook.
  --scott
Next: Junio C Hamano
Message 1 of 3 in “precommit hook broken with "git commit <filename>"”
  1. C. Scott AnanianApr 12, 2011
  2. Junio C HamanoApr 12, 2011
  3. C. Scott AnanianApr 12, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.