36

実行後にコミット (メッセージ、ファイル) に変更を加えなくても、最新のコミットの SHA-1 ハッシュが変更されるのはgit commit --amendなぜですか?

コマンドラインで次を実行するとします。

cd ~/Desktop
mkdir test_amend
cd test_amend
git init
echo 'foo' > test.txt
git add test.txt
git commit -m 'initial commit'

次に、呼び出し

git log --pretty=oneline --abbrev-commit

次のメッセージを出力します。

b96a901 initial commit

私はそれから

git commit --amend

しかし、気が変わって、最後のコミットでは何も変更しないことにしました。つまり、最後のコミットのファイル、ディレクトリ、およびメッセージはそのままにしておきます (メッセージ ファイルを保存してエディターを閉じるだけです)。

それから、私はします

git log --pretty=oneline --abbrev-commit

もう一度、コミットのハッシュが変更されたことがわかります。

3ce92dc initial commit

ハッシュが変更される原因は何ですか? コミットのタイムスタンプと関係がありますか?

4

3 に答える 3

8

次のことは、コミットshaオブジェクトを作成する際に行われます

  1. ツリー オブジェクト参照
  2. 親オブジェクト参照
  3. 著者名
  4. タイムゾーン付きの作者コミットタイムスタンプ(例:私にとっては+530) [チェリーピッキングの場合など、コミッターとは異なる場合があります]
  5. コミッター名
  6. タイムゾーン付きのタイムスタンプをコミットします(たとえば、私にとっては+530)
  7. コミットメッセージ

同じ親とツリーオブジェクト参照を持つ同じユーザーによるまったく同じコミットメッセージを持つ同じファイルをリセットして再度追加した後、コミットSHA IDが異なる理由を理解しようとしていました。

于 2015-03-07T17:20:32.570 に答える