Hello, The `reference-transaction` hook seems to have broken between Git v2.30 and v2.31, or at least violated my expectations as a user. I didn't see any mention of the `reference-transaction` hook in the release notes, so I assume that this is a bug. Given that there's documentation at `man githooks` for the `reference-transaction` hook, I assume that the feature is no longer in a preliminary stage, and so a bug report is warranted. I couldn't find any mention of a `reference-transaction` hook bug already having been reported in the mailing list search online. ## Reproduction ## To reproduce, run this script: ``` #!/bin/sh set -eu # Change between Git v2.30.0 and v2.31.0 here. GIT=${GIT:-$(which git)} echo "Running version $("$GIT" version)" # For determinism. export GIT_COMMITTER_DATE="Wed Mar 17 16:53:32 PDT 2021" export GIT_AUTHOR_DATE="Wed Mar 17 16:53:32 PDT 2021" rm -rf repo mkdir repo cd repo "$GIT" init "$GIT" commit --allow-empty -m 'Initial commit' mkdir .git/hooks cat >.git/hooks/reference-transaction <<'EOF' #!/bin/sh echo "reference-transaction ($1):" cat EOF chmod +x .git/hooks/reference-transaction "$GIT" branch -v 'test-branch' echo "Created test-branch" "$GIT" branch -v -d 'test-branch' ``` ## Expected behavior (git v2.30) ## This is the output: ``` [master (root-commit) 3b61ecc] Initial commit reference-transaction (prepared): 0000000000000000000000000000000000000000 3b61ecc56006fcc283d42b302191e1385f19b551 refs/heads/test-branch reference-transaction (committed): 0000000000000000000000000000000000000000 3b61ecc56006fcc283d42b302191e1385f19b551 refs/heads/test-branch Created test-branch reference-transaction (aborted): 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/test-branch reference-transaction (prepared): 3b61ecc56006fcc283d42b302191e1385f19b551 0000000000000000000000000000000000000000 refs/heads/test-branch reference-transaction (committed): 3b61ecc56006fcc283d42b302191e1385f19b551 0000000000000000000000000000000000000000 refs/heads/test-branch Deleted branch test-branch (was 3b61ecc). ``` It's pretty strange that there was an "aborted" reference-transaction from 0 to 0, especially with no previous "prepared" reference-transaction, but that's not the bug in question, and I can work around it by ignoring such transactions on my end. Notice that as part of the branch deletion, there is a reference-transaction from a non-zero commit hash to a zero commit hash. ## Actual behavior (git v2.31) ## ``` [master (root-commit) 3b61ecc] Initial commit reference-transaction (prepared): 0000000000000000000000000000000000000000 3b61ecc56006fcc283d42b302191e1385f19b551 refs/heads/test-branch reference-transaction (committed): 0000000000000000000000000000000000000000 3b61ecc56006fcc283d42b302191e1385f19b551 refs/heads/test-branch Created test-branch reference-transaction (prepared): 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/test-branch reference-transaction (committed): 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/test-branch reference-transaction (aborted): 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/test-branch reference-transaction (prepared): 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/test-branch reference-transaction (committed): 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 refs/heads/test-branch Deleted branch test-branch (was 3b61ecc). ``` My issues are 1) the reference-transaction deleting the branch goes from a zero commit hash, instead of from the non-zero commit hash 3b61ec, and 2) there's two such "committed" transactions for some reason. Like the other example, there's also a mysterious unpaired aborted transaction, but I assume that's not new behavior in this release. ## `git bugreport` system info ## `git` 2.30 bugreport (built from source): [System Info] git version: git version 2.30.2 cpu: x86_64 built from commit: 94f6e3e283f2adfc518b39cfc39291f1c2832ad0 sizeof-long: 8 sizeof-size_t: 8 shell-path: /bin/sh uname: Darwin 19.6.0 Darwin Kernel Version 19.6.0: Thu Oct 29 22:56:45 PDT 2020; root:xnu-6153.141.2.2~1/RELEASE_X86_64 x86_64 compiler info: clang: 12.0.0 (clang-1200.0.32.21) libc info: no libc information available $SHELL (typically, interactive shell): /bin/zsh `git` 2.31 bugreport (built from source): [System Info] git version: git version 2.31.0 cpu: x86_64 built from commit: a5828ae6b52137b913b978e16cd2334482eb4c1f sizeof-long: 8 sizeof-size_t: 8 shell-path: /bin/sh uname: Darwin 19.6.0 Darwin Kernel Version 19.6.0: Thu Oct 29 22:56:45 PDT 2020; root:xnu-6153.141.2.2~1/RELEASE_X86_64 x86_64 compiler info: clang: 12.0.0 (clang-1200.0.32.21) libc info: no libc information available $SHELL (typically, interactive shell): /bin/zsh The issue also reproduces in CI builds of Git on Linux.