931

既存のプッシュされていないコミットを変更する方法への答えは? まだ上流にプッシュされていない以前のコミット メッセージを修正する方法を説明します。新しいメッセージは、元のコミットのタイムスタンプを継承します。これは論理的に思えますが、時間を再設定する方法はありますか?

4

27 に答える 27

968

インタラクティブなリベースをedit実行して、日付を変更したいコミットを選択できます。たとえば、入力したコミットを修正するためにリベースプロセスが停止した場合:

git commit --amend --date="Wed Feb 16 14:00 2011 +0100" --no-edit

PS--date=nowは現在の時刻を使用します。

その後、対話型リベースを続行します。

作成日ではなくコミット日を変更するには:

GIT_COMMITTER_DATE="Wed Feb 16 14:00 2011 +0100" git commit --amend --no-edit

上記の行GIT_COMMITTER_DATEは、コミットの修正に使用される環境変数を設定します。

すべてが Git Bash でテストされています。

于 2011-02-16T13:50:43.163 に答える
615

修正しようとしているコミットの特定のハッシュを設定git filter-branchする env フィルターと共に使用します。GIT_AUTHOR_DATEGIT_COMMITTER_DATE

これにより、そのハッシュと将来のすべてのハッシュが無効になります。

例:

commitの日付を変更したい場合は、次の119f9ecf58069b265ab22f1f97d2b648faf932e0ようにします。

git filter-branch --env-filter \
    'if [ $GIT_COMMIT = 119f9ecf58069b265ab22f1f97d2b648faf932e0 ]
     then
         export GIT_AUTHOR_DATE="Fri Jan 2 21:38:53 2009 -0800"
         export GIT_COMMITTER_DATE="Sat May 19 01:01:01 2007 -0700"
     fi'
于 2009-01-18T06:48:07.273 に答える
440

これらすべての提案を 1 つのコマンドで処理するより良い方法は、次のとおりです。

LC_ALL=C GIT_COMMITTER_DATE="$(date)" git commit --amend --no-edit --date "$(date)"

これにより、最後のコミットのコミットと作成者の日付が「今すぐ」に設定されます。

于 2012-03-14T11:32:31.370 に答える
277

するだけですgit commit --amend --reset-author --no-editedit古いコミットの場合は、インタラクティブなリベースを実行して、日付を変更するコミットを選択できます。

git rebase -i <ref>

次にコミットを修正し--reset-author、作成--no-edit者の日付を現在の日付に変更します。

git commit --amend --reset-author --no-edit

最後に、インタラクティブなリベースを続行します。

git rebase --continue
于 2015-07-21T13:25:36.290 に答える
179

このためのスクリプトと Homebrew パッケージを作成しました。インストールは非常に簡単で、GitHubPotatoLabs/git-redateページで見つけることができます。

構文:

git redate -c 3

実行するだけgit redateで、最新の 5 つのコミットのすべての日付を vim で編集できます (-c元に戻すコミットの数を指定するオプションもあり、デフォルトは 5 です)。ご質問、ご意見、ご提案がありましたらお知らせください。

ここに画像の説明を入力

于 2016-10-17T20:24:34.147 に答える
30

すべての回答を読んだ後、インタラクティブにリベースする必要なく、複数のコミットの日付を一度に編集する、より簡潔で便利な方法を思いつきました。

git rebase HEAD~4 --exec "git commit --amend --no-edit --date 'now'"

コミッターと作者の両方の日付を変更します。

于 2020-09-25T16:21:34.750 に答える
20

前の最後のコミットの場合。

git rebase  -i HEAD~2
git commit --amend --date=now

すでに orgin にプッシュしていて、強制的に使用できる場合:

git push --force 

プッシュを強制できず、プッシュされた場合、コミットを変更することはできません! .

于 2016-04-25T00:34:39.213 に答える
19

The following bash function will change the time of any commit on the current branch.

Be careful not to use if you already pushed the commit or if you use the commit in another branch.

# rewrite_commit_date(commit, date_timestamp)
#
# !! Commit has to be on the current branch, and only on the current branch !!
# 
# Usage example:
#
# 1. Set commit 0c935403 date to now:
#
#   rewrite_commit_date 0c935403
#
# 2. Set commit 0c935403 date to 1402221655:
#
#   rewrite_commit_date 0c935403 1402221655
#
rewrite_commit_date () {
    local commit="$1" date_timestamp="$2"
    local date temp_branch="temp-rebasing-branch"
    local current_branch="$(git rev-parse --abbrev-ref HEAD)"

    if [[ -z "$date_timestamp" ]]; then
        date="$(date -R)"
    else
        date="$(date -R --date "@$date_timestamp")"
    fi

    git checkout -b "$temp_branch" "$commit"
    GIT_COMMITTER_DATE="$date" git commit --amend --date "$date"
    git checkout "$current_branch"
    git rebase "$commit" --onto "$temp_branch"
    git branch -d "$temp_branch"
}
于 2014-06-08T10:10:09.563 に答える
19

作成日とコミット日の両方を変更するには:

GIT_COMMITTER_DATE="Wed Sep 23 9:40 2015 +0200" git commit --amend --date "Wed Sep 23 9:40 2015 +0200"
于 2015-09-23T07:41:28.397 に答える
19

最後のコミットの commit 時間と author 時間の両方を によって受け入れられる時間に変更する便利なエイリアスを次に示しますdate --date

[alias]
    cd = "!d=\"$(date -d \"$1\")\" && shift && GIT_COMMITTER_DATE=\"$d\" \
            git commit --amend --date \"$d\""

使用法:git cd <date_arg>

例:

git cd now  # update the last commit time to current time
git cd '1 hour ago'  # set time to 1 hour ago

編集: これは、インデックスがクリーンであること(コミットされていない変更がないこと)をチェックし、最後のコミットメッセージを再利用するか、それ以外の場合は失敗する(フールプルーフ)、より自動化されたバージョンです。

[alias]
    cd = "!d=\"$(date -d \"$1\")\" && shift && \
        git diff-index --cached --quiet HEAD --ignore-submodules -- && \
        GIT_COMMITTER_DATE=\"$d\" git commit --amend -C HEAD --date \"$d\"" \
        || echo >&2 "error: date change failed: index not clean!"
于 2014-05-16T05:41:40.997 に答える
11

別のコミットの正確な日付を取得したい場合 (たとえば、コミットをリベース編集し、リベース前の元のバージョンの日付を取得したい場合):

git commit --amend --date="$(git show -s --format=%ai a383243)"

これにより、HEAD コミットの日付が正確にコミット a383243 の日付になるように修正されます (曖昧な点がある場合は数字を増やしてください)。また、エディター ウィンドウがポップアップ表示されるので、コミット メッセージを編集できます。

これは、通常気になる作成者の日付です。コミッターの日付については、他の回答を参照してください。

于 2016-11-18T11:17:18.223 に答える
4

最後の 3 つのコミットの作成日とコミット日を編集します。

git rebase -i HEAD~3 --committer-date-is-author-date --exec "git commit --amend --no-edit --date=now"

--execコマンドはリベースの各行の後に追加され、作成者の日付を で選択できます。--date=...コミッターの日付は作成者の日付と同じになります。

于 2020-11-23T10:07:07.403 に答える
2

コードの著作権コメントを真夜中に更新することを確認したかったので、atまたはcronでわずかな遅延の危険を冒したくありませんでした。だから、私はコードをコミットしてから:

GIT_COMMITTER_DATE="Fri Jan 1 00:00:00 2021 +1000" git commit --amend --no-edit --date="Fri Jan 1 00:00:00 2021 +1000"

(あるいは、UTC オフセットを 0 に設定することもあるでしょうか? 決定事項…) これでプッシュできます!

皆さん、あけましておめでとうございます

于 2020-12-31T14:45:29.183 に答える