3

コミットの直後にファイルに変更を加えてから実行git commit --amendしてからすばやく実行するという間違いを犯すことがよくあります。git push -f origin master

問題は、明らかに、私が走ったことがないということgit add foo.mdです。したがって、私の修正は、実際にはコミットされたコードのいずれも修正しませんでした。

質問は:変更なしでコミットを修正するときにgitが警告しないのはなぜですか?さらに良いことに、なぜそれが正常に完了するのですか?特定のコミットのタイムスタンプを変更する際の「タッチ」のように動作するだけですか?

4

2 に答える 2

3

コミット作成者の日付()が同じままであっても、コミッターの日付(%ci)はリセットされ続けます。 たとえば、Gitリポジトリの最後のコミットをコミット--amend -no-editすると、作成者の日付は変更されませんが、新しいコミットを作成しました。古いコミットを同じコンテンツに置き換えますが、コミット日は異なります。%ai

P:\git\git>git show -s --format="%ci" e0d6576639261beefb40afa52696d02f16c490ed
2012-12-11 03:42:23 +0100  <== just now

P:\git\git>git show -s --format="%ai" e0d6576639261beefb40afa52696d02f16c490ed
2012-12-07 14:18:55 -0800  <== original date when the author did commit

したがって、修正を行うと、SHA1が異なります。

プロブックから:

  • 作者は最初に作品を書いた人であり、
  • 一方、コミッターは最後に作業を適用した人です。

コミッターの日付が変更されているという理由だけで、 Acommit --amendは常に新しいコミットを再作成します。

于 2012-12-11T02:45:10.713 に答える
1

Amendは、コミットメッセージやその他のコミットの詳細を変更する場合に便利です。したがって、作業ディレクトリを変更せずに実行することは非常に理にかなっています。今後このような問題を防ぐために、

git commit -a --amend
于 2012-12-11T11:21:12.637 に答える