These hooks modify the author date and committer date of any commit. An example:
$ git commit -m 'tmp' date-truncate: 885c484 -> 546299f (truncated author date and committer date) (use "git reset 885c484" to undo) [master 885c484] tmp 1 file changed, 5 insertions(+) create mode 100644 tmp-file
When a commit is made, the author date and committer date are automatically truncated to the date part only, and the timezone information is dropped. The commit hash is changed as a result.
The old commit: (which will not be published if you run git push)
$ git show --format=fuller 885c484 commit 885c484cfc724dd7f4f087c08859b14019eaf3f9 Author: Hypercube <hypercube@0x01.me> AuthorDate: Mon Apr 1 11:01:44 2024 +0800 Commit: Hypercube <hypercube@0x01.me> CommitDate: Mon Apr 1 11:01:44 2024 +0800 tmp
The new commit:
$ git show --format=fuller 546299f commit 546299f946aac739d9ec6a8229434fb0be35963d (HEAD -> master) Author: Hypercube <hypercube@0x01.me> AuthorDate: Mon Apr 1 00:00:00 2024 +0000 Commit: Hypercube <hypercube@0x01.me> CommitDate: Mon Apr 1 00:00:00 2024 +0000 tmp
The git-date-truncate script inspects the last commit, if its author name and author email matches user.name and user.email in the git configuration, it drops the time and timezone information from the author date. The same is done for the committer.
The hooks call the script after a commit is made. By default, it will output the old and new commit hashes, and a command to undo the operation, in case the user wants to revert the changes.
- Copy the
git-date-truncatescript to somewhere in your$PATH. - Copy the files in
hooksdirectory to.config/git/template/hooksor~/.git-template/hooks. If you only want to enable the hooks for a single repository, copy the files to.git/hooksin the repository. - For all existing repositories, run
git initin the repository to apply the hooks in the template directory.
This script is not tested with all possible edge cases. Use at your own risk. In rare cases like complex rebases, the script may not work as expected.