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

Re: git commit -v does not removes the patch

From
SZEDER Gábor <szeder@ira.uka.de>
Date
Nov 22, 2008, 15:55 UTC
Message-ID
<20081122155541.GC6885@neumann>
In-Reply-To
<20081120152015.GA6283@coredump.intra.peff.net>
Hi Jeff,
On Thu, Nov 20, 2008 at 10:20:16AM -0500, Jeff King wrote:
> On Thu, Nov 20, 2008 at 02:09:28PM +0100, SZEDER Gábor wrote:
> Hmm. I am sad that this change has broken somebody's existing workflow.
> OTOH, I'm not convinced that workflow wasn't a little crazy to begin
> with, depending on this undocumented munging.

Well, the docs didn't say that the patch is only removed in verbose mode (; But I agree with you that this is (was) an undocumented "feature" that I should not have relied upon.

Show 17 quoted lines
> > So, what is the/is there a preferred way to always include the diff in
> > the commit message template and get it removed automatically?  Are
> > there any workarounds other than revert that commit locally?
> 
> How about:
> 
>     $ cat .git/hooks/prepare-commit-msg
>     #!/bin/sh
>     git diff --cached >>"$1"
> 
>     $ cat .git/hooks/commit-msg
>     #!/bin/sh
>     sed -i '/^diff --git/Q' "$1"
> 
> which is more or less the original behavior. The only downside I see is
> that "--no-verify" will turn off the commit-msg hook, but not the
> prepare-commit-msg hook.

Thanks for the tip. Junio's suggestion about '# Everything under this line is deleted.' could be implemented this way fairly easily (just an additional echo in prepare-commit-msg, and other pattern in commit-msg). But 'git commit --no-verify' is indeed a problem. Although I never use it explicitly, 'git rebase -i' does so.

However.

'git rebase -i' uses 'git commit --no-verify' since c5b09feb (Avoid update hook during git-rebase --interactive, 2007-12-19) to avoid squashing commits together when the pre-commit hook fails because of whitespace errors. But note that at that time the 'git commit' calls looked like this (after that patch):

  $USE_OUTPUT git commit --no-verify -F "$MSG" $EDIT_COMMIT
  git commit --no-verify -F "$DOTEST"/message -e

Witness that it's not checked whether 'git commit' succeeded or failed. However, nowadays those lines look like this:

  $USE_OUTPUT git commit --no-verify $MSG_OPT "$MSG_FILE" $EDIT_COMMIT || failed=t
  git commit --no-verify -F "$DOTEST"/message -e || { ...

There is a check for failed 'git commit', so if the pre-commit hook finds whitespace errors, then 'git commit' will error out, and, consequently, 'git rebase -i' will error out, too, and commits won't be squashed accidentaly.

So, I wonder whether those '--no-verify' options are still required in 'git rebase -i'.

Any thoughts?

Thanks, Gábor

Previous: Jeff KingNext: Jeff King
Message 20 of 22 in “git commit -v does not removes the patch”
  1. Santi BéjarNov 10, 2008
  2. Jeff KingNov 10, 2008
  3. Santi BéjarNov 10, 2008
  4. Junio C HamanoNov 10, 2008
  5. Jeff KingNov 11, 2008
  6. Santi BéjarNov 11, 2008
  7. Jeff KingNov 11, 2008
  8. Santi BéjarNov 11, 2008
  9. Junio C HamanoNov 11, 2008
  10. Jeff KingNov 12, 2008
  11. 1/5 define empty tree sha1 as a macroJeff King, Nov 12, 2008
  12. 2/5 wt-status: refactor initial commit printingJeff King, Nov 12, 2008
  13. 3/5 status: show "-v" diff even for initial commitJeff King, Nov 12, 2008
  14. 4/5 commit: loosen pattern for matching "-v" diffJeff King, Nov 12, 2008
  15. 5/5 commit: only strip diff from message in verbose modeJeff King, Nov 12, 2008
  16. Jeff KingNov 12, 2008
  17. Junio C HamanoNov 13, 2008
  18. SZEDER GáborNov 20, 2008
  19. Jeff KingNov 20, 2008
  20. SZEDER GáborNov 22, 2008
  21. Jeff KingNov 22, 2008
  22. Junio C HamanoNov 22, 2008

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.