2014 年 6 月の更新: David Fraserはコメントで、オプション(2009 年 1 月にコミット 3f01ad6で最初に導入された) を使用して、「 git ブランチのリベース中にタイムスタンプを変更する」でも詳述されているソリューションについて言及しています。--committer-date-is-author-date
この--committer-date-is-author-date
オプションは作成者のタイムスタンプを残し、コミッターのタイムスタンプを元の作成者のタイムスタンプと同じに設定するように見えることに注意してください。これは、OP Olivier Verdierが望んでいたことです。
正しい日付の最後のコミットを見つけて、次のことを行いました。
git rebase --committer-date-is-author-date SHA
参照git am
:
--committer-date-is-author-date
デフォルトでは、コマンドは電子メール メッセージの日付をコミット作成者の日付として記録し、コミットの作成時刻をコミッターの日付として使用します。
これにより、ユーザーは作成者の日付と同じ値を使用して、コミッターの日付について嘘をつくことができます。
注: Git 2.29 (2020 年第 4 四半期) では、git rebase--committer-date-is-author-date
または 以下--ignore-date
でも動作します。
- 対話型リベース (
rebase -i
/ rebase --interactive
)
- ルートコミット (
git rebase --root
)
「 git ブランチのリベース中にタイムスタンプを変更する」を参照してください。
(元の回答、2012 年 6 月)
あなたは試すことができます非インタラクティブリベース
(上記を参照してください: Git 2.29、2020 年第 4 四半期では、インタラクティブなリベースでも機能します)
git rebase --ignore-date
(このSOの回答から)
これは に渡されgit am
、次のことが言及されています。
--ignore-date
デフォルトでは、コマンドは電子メール メッセージの日付をコミット作成者の日付として記録し、コミットの作成時刻をコミッターの日付として使用します。
これにより、ユーザーはコミッターの日付と同じ値を使用して作成者の日付について嘘をつくことができます。
の場合git rebase
、このオプションは「--interactive オプションと互換性がありません」です。
古いコミット日付のタイムスタンプを自由に変更できるので( を使用git filter-branch
)、Git の履歴を希望/必要なコミット日付順で整理でき、未来に設定することもできると思います! .
Olivierが彼の質問で言及しているように、作成者の日付はリベースによって変更されることはありません。Pro Git Book
から:
- 作者はその作品を最初に書いた人で、
- コミッターは、その作業を最後に適用した人です。
そのため、プロジェクトにパッチを送信し、コア メンバーの 1 人がそのパッチを適用すると、両方にクレジットが与えられます。
より明確にするために、この場合、Olivier は次のようにコメントしています。
これ--ignore-date
は、私が達成しようとしていたことの反対です!
つまり、作成者のタイムスタンプを消去し、コミットのタイムスタンプに置き換えます!
したがって、私の質問に対する正しい答えは次のとおり です。実際にはデフォルトで作成者のタイムスタンプを変更しない
ため、何もしないでください。git rebase
DylanYoungがコメントに追加したように、「git rebase 中にハッシュによって競合するコミットを識別するにはどうすればよいですか?」を使用して:
SEQUENCE_EDITOR
変数と rebase interactiveを使用すると、現在のリストをループして、の各コミットの前に を元のコミットの日付にtodo
設定するコマンドを追加するだけです。GIT_COMMITER_DATE
todo
最初に元のコミットのリストがあるため (それを見つけるために git 内部にハックする必要はありません)、少し面倒ではありませんが、リスト全体を一度に処理する必要があるため、もう少し手間がかかります。–</p>
元のコミットを特定できたら、次のようなことができます。
git rebase -x 'GIT_COMMITTER_DATE="git show -s --format=%ci ``get_current_commit``" git commit --amend --no-edit