Mengapa git melakukan-ubah perubahan hash, bahkan jika saya tidak melakukan perubahan?

Mengapa hasa SHA-1 dari perubahan komit terakhir saya, bahkan jika saya tidak membuat perubahan pada komit (pesan, file) setelah menjalankan git commit --amend ?

Katakanlah saya menjalankan yang berikut di baris perintah.

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

Lalu menelepon

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

menampilkan pesan berikut:

 b96a901 initial commit 

Lalu saya lakukan

 git commit --amend 

tapi saya berubah pikiran dan memutuskan untuk tidak mengubah apa pun di komit terakhir. Dengan kata lain, saya meninggalkan file, direktori, dan pesan komit terakhir tetap utuh (saya hanya menyimpan file pesan dan menutup editor).

Lalu, saya lakukan

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

Sekali lagi, saya melihat bahwa hash komit telah berubah:

 3ce92dc initial commit 

Apa yang membuat perubahan hash? Apakah ini terkait dengan cap waktu fiksasi?

22
21 мая '14 в 22:20 2014-05-21 22:20 Jubobs diatur pada 21 Mei '14 pukul 10:20 2014-05-21 22:20
@ 3 balasan

Ya, itu adalah tanda fiksasi. Memeriksa isi dari dua komit menunjukkan:

 $ git cat-file commit 82c7363bcfd727fe2d6b0a98412f71a10c8849c9 tree d87cbcba0e2ede0752bdafc5938da35546803ba5 author Thomas <xxx> 1400700200 +0200 committer Thomas <xxx> 1400700200 +0200 hello $ git cat-file commit 7432fcf82b65d9d757efd73ef7d6bff4707f99bd tree d87cbcba0e2ede0752bdafc5938da35546803ba5 author Thomas <xxx> 1400700200 +0200 committer Thomas <xxx> 1400700214 +0200 hello 

Jika Anda membuat perubahan di detik yang sama seperti aslinya, mungkin Anda akan mendapatkan hash yang sama.

20
21 мая '14 в 22:29 2014-05-21 22:29 Balas ke Thomas pada 21 Mei '14 pukul 10:29 2014-05-05 22:29

Berikut ini terjadi dalam penciptaan objek commit sha

  • referensi objek pohon
  • tautan induk
  • nama penulis
  • Penulis memperbaiki cap waktu dengan zona waktu (misalnya, bagi saya itu adalah +530) [mungkin berbeda dari committer, misalnya, dalam hal memetik ceri]
  • nama committer
  • perbaiki stempel waktu dengan zona waktu (misalnya, itu +530 untuk saya)
  • komit pesan

Saya mencoba mencari tahu mengapa melakukan pengidentifikasi SHA berbeda setelah reset dan kembali menambahkan file yang sama dengan pesan yang sama tentang seseorang-pengguna yang sama dengan referensi yang sama ke objek induk dan pohon.

4
07 марта '15 в 20:20 2015-03-07 20:20 Jawaban diberikan oleh Abhijit Mazumder pada 07 Maret '15 pada 20:20 2015-03-07 20:20

Membuat perubahan pada komit Git mengubah tanggal komit (yang berbeda dari tanggal yang Anda lihat ketika menjalankan git log - jalankan git log --format=fuller untuk melihat tanggal komit). Tanggal komit diperhitungkan saat membuat komit hash.

3
21 мая '14 в 22:24 2014-05-21 22:24 jawabannya diberikan mipadi 21 Mei '14 jam 10:24 2014-05-21 22:24

Pertanyaan lain tentang tag atau Ajukan pertanyaan