threads / discuss / 29507

rebase -i reword runs pre-commit hook with curious results

Subject: rebase -i reword runs pre-commit hook with curious results

## tl;dr

3 messages between Feb 1, 2012 and Feb 2, 2012.

replies: 2people: 3as markdown or json

Neal Kreitzinger· Feb 1, 2012, 21:50 UTC · lore

I'm confused on why and/or how interactive rebase runs the pre-commit hook when doing the reword command for commit (a). My pre-commit hook does keyword expansion on the worktree copy of the modified index files and then re-adds them to effect a user-date-stamp when committed. However, the user-date-stamps don't get updated when reword runs the pre-commit hook. IOW, the pre-commit hook does not get the same results as if I were doing a commandline git-commit of a modified index. I suppose reword is protecting the preservation of all the contents of commit (a) except the commit message which makes sense, but I don't understand how it goes about doing this while still attempting to somehow honor the pre-commit hook. (git 1.7.1)

v/r, neal

Andrew Wong· Feb 2, 2012, 05:43 UTC · re: Neal Kreitzinger · lore

Re: rebase -i reword runs pre-commit hook with curious results

On 12-02-01 4:50 PM, Neal Kreitzinger wrote:
> I'm confused on why and/or how interactive rebase runs the pre-commit hook
> when doing the reword command for commit (a).

When you do a "reword" in "rebase -i", it basically does a "cherry-pick" of that commit first, then it does a "commit --amend". And your pre-commit hook should've been run during the amend.

> IOW, the pre-commit hook does not get the same results as if I were doing a
> commandline git-commit of a modified index.

Does your pre-commit hook work when doing a "commit --amend"? I'm not sure if you can actually modify the author (or committer) date from inside a pre-commit hook.

Neal Kreitzinger· Feb 2, 2012, 16:39 UTC · re: Andrew Wong · lore

Re: rebase -i reword runs pre-commit hook with curious results

On 2/1/2012 11:43 PM, Andrew Wong wrote:
Show 13 quoted lines
> On 12-02-01 4:50 PM, Neal Kreitzinger wrote:
>> I'm confused on why and/or how interactive rebase runs the pre-commit
>> hook
>> when doing the reword command for commit (a).
> When you do a "reword" in "rebase -i", it basically does a "cherry-pick"
> of that commit first, then it does a "commit --amend". And your
> pre-commit hook should've been run during the amend.
>> IOW, the pre-commit hook does not get the same results as if I were
>> doing a
>> commandline git-commit of a modified index.
> Does your pre-commit hook work when doing a "commit --amend"? I'm not
> sure if you can actually modify the author (or committer) date from
> inside a pre-commit hook.

(We have a comment on "line 1" in our source with $User:$ $Date:$ keywords that the pre-commit hooks expands to insert "whoami" and "date" values to effect a user-datestamp at commit time. We do this to enforce conflicts on same-file edits.) Now that I understand that the cherry-pick takes place first to effect the transfer of the tree content and then a subsequent git-commit --amend of "no changes" takes place to effect the reword opportunity, the behavior makes sense now. (We use git-commit --amend to reword commit messages also.) The pre-commit hook runs prior to commit message editor just like commandline git-commit --amend (and plain git-commit).

thanks!

v/r, neal

← back to recent threads