web-dev-qa-db-ja.com

GIT:コミット日を作成日に変更

コミット日をコミットから著者の日付に変更することはできますか?

私はいくつかのコミットを適応させましたが、今では日付はすべて同じです。古い日付(または作成者の日付)に戻したい。これは可能ですか?

Sourcetreeを使用しているので、gitコマンドラインがありますが、私はそれが得意ではありません。私の外部リポジトリはbitbucketです。

42
kevingoos

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コマンドを使用するよりもはるかに便利です。

38
torek

短い答え:

git filter-branch --env-filter 'export GIT_COMMITTER_DATE="$GIT_AUTHOR_DATE"'

説明:

filter-branchは、git履歴を書き換えることができます。各コミットに変換を適用したり、特定の基準に基づいてコミットを除外したりできます。見る git filter-branch --help包括的な説明と使用手順について。

--env-filterを使用すると、新しい履歴の作成中に存在する環境変数を設定できます。コミットごとに個別に評価されます。

57
jsphpl