Bagaimana cara melakukan tidak ada perubahan dan pesan baru?

137

Bagaimana saya bisa membuat yang baru commitdan membuat pesan baru jika tidak ada perubahan pada file?

Apakah ini tidak mungkin karena kode commit (SHA?) Akan sama?

d -_- b
sumber

Jawaban:

168

Jarang ada alasan bagus untuk melakukan ini, tetapi parameternya adalah --allow-emptyuntuk komit kosong (tidak ada file yang berubah), berbeda dengan --allow-empty-messageuntuk pesan komit kosong. Anda juga dapat membaca lebih lanjut dengan mengetik git help commitatau mengunjungi dokumentasi online .

Sementara objek pohon (yang memiliki hash sendiri) akan identik, komit sebenarnya akan memiliki hash yang berbeda, karena ia mungkin akan memiliki cap waktu dan pesan yang berbeda, dan pasti akan memiliki komit induk yang berbeda. Ketiga faktor tersebut terintegrasi ke dalam gitalgoritma hash objek.


Ada yang beberapa alasan Anda mungkin ingin kosong komit (menggabungkan beberapa komentar):

  • Sebagai "komitmen deklaratif", untuk menambahkan narasi atau dokumentasi (melalui DavidNeiss ) termasuk data setelah-fakta tentang lulus tes atau serat (melalui Robert Balicki ).
  • Untuk menguji gitperintah tanpa menghasilkan perubahan sewenang-wenang (via Vaelus ).
  • Untuk membuat kembali repositori telanjang yang dihapus menggunakan gitolite(via Tatsh ).
  • Untuk secara sewenang-wenang membuat komit baru, seperti untuk memicu kembali perkakas bangunan (via mattLummus ) atau untuk kepentingan pencatatan atau metrik pribadi (melalui DynamiteReed ). Namun, pikirkan dua kali: tergantung pada cabang / struktur gabungan Anda, komit dapat hidup untuk waktu yang sangat lama, sehingga strategi "tidak melakukan apa-apa" mungkin secara tidak sengaja mencemari repositori tim Anda dengan artefak alur kerja sementara dan membuatnya sulit untuk memisahkan revisi kode dari cruft fana.

Strategi lain untuk menambahkan metadata ke pohon komit meliputi:

  • Pisahkan cabang atau tag ringan yang selalu mengarah ke komit status tertentu (mis. "Komit terakhir diterima" atau "komit pementasan saat ini").
  • Tag Beranotasi untuk cara merekam stempel waktu, pengalih, dan pesan, menunjuk komit yang ada tanpa menambahkan entri di hierarki komit itu sendiri.
  • git notes untuk mengaitkan catatan yang bisa berubah di atas komit kekal yang ada.
Jeff Bowman
sumber
2
Saya sudah mulai mengikuti model cabang git flow . Ketika Anda membuat devbentuk cabang masterdan kemudian featcabang langsung dari dev, featcabang tampak berasal dari mastercabang karena tidak ada komit pembeda pada devcabang yang featberasal dari cabang. Komit kosong ketika pertama kali Anda membuat devcabang membantu mendirikan devcabang karena itu adalah cabang yang abadi tanpa batas master. Secara umum akan sangat membantu ketika Anda menggunakan cabang sebagai lapisan, dan membuat dua lapisan dari satu komit
Novice C
2
Alasan lain: Jika Anda menghilangkan sesuatu yang penting dari pesan komit Anda sebelum mendorong, Anda tidak dapat melakukannya commit --amendjika remote tidak memungkinkan memaksa mendorong. Dengan cara ini Anda dapat memungkinkan pengembang melihat pesan penting yang sesuai dengan komit sebelumnya.
Andy J
1
Saya ingin melakukan ini karena saya mendorong komit, tetapi lupa menyebutkan sesuatu dalam pesan komit. Pesan komit kami terintegrasi dengan pelacakan masalah dan perangkat lunak integrasi berkelanjutan dan isi dari pesan komit memengaruhi aplikasi tersebut. Apakah ada cara yang lebih baik? Ini sepertinya solusi terbaik dalam kasus saya. Satu-satunya hal yang dapat saya bayangkan adalah entah bagaimana bisa mengembalikan komit sebelumnya.
sytech
1
Saya hanya menggunakan ini untuk memicu kait pra-komit kami, yang membuat skrip database. Jadi ada perubahan, hanya git tidak bisa melihatnya sampai setelah skrip berjalan. Bisa saja menjalankannya secara manual, tetapi kemudian menjalankan skrip itu dua kali.
yoyodyn
1
Sangat berguna saat berinteraksi dengan pelacakan masalah bawaan ke git server sebagai github dan gogs.
SimonF
37

Jika saya mengerti Anda benar, Anda ingin membuat komit kosong. Dalam hal ini Anda membutuhkan:

git commit --allow-empty
Dima
sumber
35

Kosongkan komit dengan pesan

git commit --allow-empty -m "Empty test commit"

Komit kosong dengan pesan kosong

git commit --allow-empty --allow-empty-message
Adobels
sumber
3

Jika Anda menggunakan sistem seperti gitversion, sangat masuk akal untuk melakukan komit semacam ini. Anda dapat memiliki komit yang khusus untuk menabrak versi utama menggunakan + semver: komentar utama.

Kevin Johnson
sumber
3

Mungkin sebagai alternatif yang lebih masuk akal, Anda dapat membuat tag beranotasi (komit bernama dengan pesan). Lihat git tag -aopsi.

kan
sumber