Your Git commit logs provide a good approximation of your habits and time zone: When you sleep, if you are working full time, which projects are private and and which are work-related (weekend vs workday commits), when you go to lunch, etc.

By setting the environment variables GIT_AUTHOR_DATE and GIT_COMMITTER_DATE before committing, you can change the recorded time of a commit. But always setting those variables before committing becomes tedious, so I experimented with a shell function that sets the environment variables for me. The first attempt, commit_yesterday, is just a proof of concept:

#!/bin/sh
function commit_yesterday() {
yesterday=$(date -v-1d) env GIT_AUTHOR_DATE=$yesterday GIT_COMMITTER_DATE=$yesterday git commit$*
}

What if you want to be more flexible when setting the date? Enter the dcommit function:

#!/bin/sh
# Set different commit dates
function dcommit() {
commit_date=$( eval$1); shift
env GIT_AUTHOR_DATE=$commit_date GIT_COMMITTER_DATE=$commit_date git commit $* fi } Here is an example of a Git session with dcommit, pretending to work 3 hours in the past: $ source dcommit.sh
$git add my_past_file$ dcommit 'date -v-3H' -m "Add a file"
$rm my_other_file$ dcommit 'date -v-3H' -a


With the date -v command you can set the date to a fixed offset. But you can also go wild and set create the parameter to another function or shell script do more random or subtle changes. Some ideas:

• Always set the seconds to 23. Conspiracy nuts will marvel at your power!
• Fluctuating timezones: Set an hourly offset based on the current day: offset=$(bc <<< "$(date '+%d') / 1.25 - 12")
• Subtract 1 day if the current day is even (looks like you only commit on odd days).
• Set seconds to a value derived by Base60-encoding a secret message.

I’ve tried using a pre-commit hook instead of a custom command, but apparently Git does not permit setting GIT_COMMITTER_DATE in a pre-commit hook.

If you’re interested creating patterns (even small icons) in your commit history, have a look at gitfiti instead of fiddling with your commit dates.

A warning: It’s probably a bad idea to mess with commit dates. I am no Git or shell expert and can not be held responsible if you mess up your repo or make your co-committers angry.