How to push a file to past time?

后端 未结 2 1710
夕颜
夕颜 2020-12-17 07:06

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

相关标签:
2条回答
  • 2020-12-17 07:22

    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

    0 讨论(0)
  • 2020-12-17 07:35

    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
    0 讨论(0)
提交回复
热议问题