コミット日をコミットから著者の日付に変更することはできますか?
私はいくつかのコミットを適応させましたが、今では日付はすべて同じです。古い日付(または作成者の日付)に戻したい。これは可能ですか?
Sourcetreeを使用しているので、gitコマンドラインがありますが、私はそれが得意ではありません。私の外部リポジトリはbitbucketです。
Git 1.6.3以降、git rebase
にはこの目的のための--committer-date-is-author-date
があります。
git rebase --committer-date-is-author-date
元の答え:
committerの日付を設定する簡単な方法はありません(編集:ただし、以下の「編集2」を参照)。 authorの日付は、--date
で指定することができるため、(コミット時に)簡単に調整できます。
環境変数GIT_COMMITTER_DATE
を使用して、コミット時に異なるタイムスタンプを強制することができます。ただし、「リプレイ」するコミットごとにこれを調整する必要があることに注意してください。結果の新しいコミットには異なるSHA-1が含まれます(一部のビット、つまりコミッターの日付フィールドを変更したため)。つまり、すべての子孫コミットをやり直す必要があります。
これがgit filter-branch
が行うことです(途中で行われた変更を使用して一部、多数、またはすべてのコミットを再作成し、古いSHA-1 IDから新しいSHA-1 IDへのマッピングを維持し、それ以外の場合は-新しいSHA-1 IDの「新しい」DAGが可能なすべての方法、つまりSHA-1 IDおよびフィルターによって行われた他の変更を除くすべての方法で「古い」DAGと一致するように、未処理のコミットコピー)。
言い換えると、これを行うには、git filter-branch
を使用して履歴を書き換える必要があります。 [編集:文字通りgit filter-branch
なしで行うことができます。たとえば、代わりにgit rebase -i
で行うこともできますが、効果は同じです。]
編集2:コメントに記載されているように(削除されたため)、git rebase
にはこの目的のための--committer-date-is-author-date
があります。それでも同じ履歴の書き換えを行いますが、生のgit filter-branch
コマンドを使用するよりもはるかに便利です。
git filter-branch --env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"'
filter-branch
は、git履歴を書き換えることができます。各コミットに変換を適用したり、特定の基準に基づいてコミットを除外したりできます。見る git filter-branch --help
包括的な説明と使用手順について。
--env-filter
を使用すると、新しい履歴の作成中に存在する環境変数を設定できます。コミットごとに個別に評価されます。