Yesterday, I made changes on a project file but forgot to commit and push it on github. I don\'t want that my contribution streak breaks after 51 days..so I would like to pu
Yesterday, I made changes on a project file but forgot to commit and push it on github
As far as I know, GitHub contribution graphs rely on commit datetimes, not push datetimes. FWIW, there are even tools abusing this to use the contribution graph as a drawing board (cf. this google search).
So the easy way would be to
Commit locally now
Then rewrite your latest commit to change the authorship date (pick the time and timezone you'd like) with something like git commit --amend --date="Wed Jul 12 14:17 2014 +0900"
Push
I have that script in my path, called git-rcd, which changes GIT_COMMITTER_DATE
and GIT_AUTHOR_DATE
of any commit you want (not just the last one)
#!/bin/bash
# commit
# date YYYY-mm-dd HH:MM:SS
commit="$1" datecal="$2"
temp_branch="temp-rebasing-branch"
current_branch="$(git rev-parse --abbrev-ref HEAD)"
date_timestamp=$(date -d "$datecal" +%s)
date_r=$(date -R -d "$datecal")
echo "datecal=$datecal => date_timestamp=$date_timestamp date_r=$date_r"
if [[ -z "$commit" ]]; then
exit 0
fi
git checkout -b "$temp_branch" "$commit"
GIT_COMMITTER_DATE="$date_timestamp" GIT_AUTHOR_DATE="$date_timestamp" git commit --amend --no-edit --date "$date_r"
git checkout "$current_branch"
git rebase --autostash --committer-date-is-author-date "$commit" --onto "$temp_branch"
git branch -d "$temp_branch"
What that allows me is take the last commit I just did and type:
git rcd @ '1 day ago'
And presto! My last commit has now been done yesterday.
It changes any commit you want:
git rcd @~2 '1 day ago'
That would only change the HEAD~2
(and not the HEAD~
or HEAD
)
The script works even on Windows.
Once the change is done, push (or git push --force
if you pushed before with the wrong date). And your streak is preserved.
Note (2020), David Fullerton mentions in the comments:
Getting this working on Mac OS X required:
- installing coreutils to get GNU date and then
- updating the script to use
gdate