Git komit tanpa pesan komit

108

Bagaimana saya bisa melakukan perubahan tanpa menentukan pesan komit? Mengapa ini diperlukan secara default?

Nik
sumber
6
Akhirnya, git commit -a --allow-empty-message -m ''bahkan tidak akan membuka editor lagi. Lihat jawaban saya di bawah ini
VonC
2
Pada Windows perintah ini git commit -a --allow-empty-message -m ''merek komit dengan pesan commit " ''", maka akan lebih baik untuk menggunakan perintah ini sebagai gantinya: git commit -a --allow-empty-message -m "".
tav

Jawaban:

137

git umumnya memerlukan pesan yang tidak kosong karena menyediakan pesan komit yang berarti adalah bagian dari praktik pengembangan yang baik dan pengelolaan repositori yang baik. Baris pertama dari pesan komit digunakan di semua tempat di dalam git; untuk lebih lanjut, baca "Catatan Tentang Pesan Git Commit" .

Jika Anda membuka Terminal.app, cdke direktori proyek Anda, dan git commit -am '', Anda akan melihat bahwa itu gagal karena pesan komit kosong tidak diperbolehkan. Versi git yang lebih baru memiliki
--allow-empty-messageargumen baris perintah, termasuk versi git yang disertakan dengan Xcode versi terbaru. Ini akan membiarkan Anda menggunakan perintah ini untuk membuat komit dengan pesan kosong:

git commit -a --allow-empty-message -m ''

Sebelum --allow-empty-messagebendera, Anda harus menggunakan commit-treeperintah pipa ledeng. Anda dapat melihat contoh penggunaan perintah ini di bab "Raw Git" dari buku Git .

Jeremy W. Sherman
sumber
1
Versi yang lebih baru gitmemiliki --allow-empty-messageargumen baris perintah. Lihat dokumentasinya di sini . Ini menyebutkan Anda dulu dapat melakukan hal yang sama menggunakan perintah pipa ledeng git-commit-tree.
Jeremy W. Sherman
18
Menurut saya kalimat "memberikan pesan komitmen yang berarti adalah bagian dari praktik pengembangan yang baik" adalah salah - orang dapat mengatakan bahwa memberikan pesan komitmen yang bermakna dianggap sebagai bagian dari praktik pengembangan yang baik, karena pernyataan tersebut memecah belah - I for one percaya bahwa informasi yang lebih sedikit terkadang menyebabkan lebih sedikit kebingungan, terutama karena git jelas menyimpan perubahan aktual ke repositori, dan sebuah surat git diffwasiat akan menunjukkan kepada pihak yang berkepentingan dengan tepat apa isi komit, tanpa bergantung pada deskripsi tertulis manusia. Mesin harus menyelamatkan kita dari tenaga kerja jika memungkinkan.
amn
2
@ amn, saya juga baru saja mulai bertanya-tanya tentang puluhan ribu pesan komit yang ditulis dengan baik yang telah saya tulis yang tidak akan pernah dibaca oleh siapa pun. Bagi saya sekarang nilai dari kebiasaan ini adalah bahwa hal itu memaksa saya untuk melihat perubahan dalam upaya untuk menggambarkannya, dan ini terkadang membuat saya memperhatikan bug. Anda benar. Saya akan mempertimbangkan untuk lebih memperhatikan kode dan lebih sedikit pada pesan komit.
osa
7
Git tidak hanya digunakan untuk pengembangan kode lagi. Ketika saya mengupdate halaman wiki GitHub atau dokumen Overleaf LaTeX, biasanya tidak ada yang perlu dikatakan karena saya mengupdate dokumentasi. Segala sesuatu yang bermakna secara semantik tentang perubahan terkandung dalam diff. Saya sebenarnya menemukan diri saya menggunakan teks perubahan sebagai pesan komit itu sendiri: benar-benar berlebihan!
Jim Pivarski
1
@ amn, terkadang keluaran dari git difftidak cukup jelas, bahkan ketika pelaku percaya itu.
Cowlinator
26

Dan jika Anda menambahkan alias untuk itu maka itu lebih baik bukan?

git config --global alias.nccommit 'commit -a --allow-empty-message -m ""'

Sekarang Anda tinggal melakukan nccommit, nc karena tidak ada komentar, dan semuanya harus dikomit.

dalvarezmartinez1
sumber
19

Saat mengerjakan pembaruan kode penting, jika Anda benar-benar membutuhkan titik aman perantara, Anda dapat melakukan:

git commit -am'.'

atau lebih pendek:

git commit -am.
lesu
sumber
Dan apa fungsinya?
Fishinear
Menambahkan komit dengan pesan '.'
lesu
Saya menggunakan metode ini ketika saya benar-benar tidak ingat apa yang saya masukkan ke dalam sebuah commit dan saya terlalu malas untuk diffitu semua.
TheTechRobo36414519
16

Catatan: mulai git1.8.3.2 (Juli 2013), perintah berikut ( disebutkan di atas oleh Jeremy W Sherman ) tidak akan membuka editor lagi:

git commit --allow-empty-message -m ''

Lihat commit 25206778aac776fc6cc4887653fdae476c7a9b5a :

Jika pesan kosong ditentukan dengan opsi -mgit commit maka editor akan dimulai.
Itu tidak terduga dan tidak perlu.
Alih-alih menggunakan panjang string pesan untuk memeriksa apakah pengguna menentukannya, langsung ingat jika opsi -mdiberikan.


git 2.9 (Juni 2016) meningkatkan perilaku pesan kosong:

Lihat commit 178e814 (06 Apr 2016) oleh Adam Dinwoodie ( me-and) .
Lihat commit 27014cb (07 Apr 2016) oleh Jeff King ( peff) .
(Digabung oleh Junio ​​C Hamano - gitster- di commit 0709261 , 22 Apr 2016)

commit: jangan abaikan pesan kosong yang diberikan oleh -m ''

  • " git commit --amend -m '' --allow-empty-message", meskipun terlihat aneh, adalah permintaan yang valid untuk mengubah komit agar tidak memiliki pesan sama sekali.
    Karena kesalahan deteksi keberadaan -mpada baris perintah, kami akhirnya menyimpan pesan log dari komit asli.
  • " git commit -m "$msg" -F file" harus ditolak apakah $msgstring kosong atau bukan, tetapi karena bug yang sama, tidak ditolak saat $msgkosong.
  • "git -c template=file -m "$msg" " harus mengabaikan template meskipun $msgkosong, tetapi template tidak dan malah menggunakan konten dari file template.
VonC
sumber
3

Anda tidak perlu keberanian untuk mencapai ini. Penggunaan kreatif dari fungsi bash akan berhasil dengan baik. Jika Anda tidak peduli dengan pesan, cukup setel default dan lupakan.

function gitcom() {
  git commit -m "my default commit message"
}

Jika Anda merasa benar-benar suka berpetualang, Anda dapat menambahkan, berkomitmen, dan mendorong dengan satu perintah

function gitzap() {
  git add . && git commit -m "whatevs" && git push $1 $2
}

Yang kemudian akan Anda jalankan sebagai

gitzap origin master

Anda bahkan bisa lebih mendalam dan menggunakan parse_git_branch untuk menghemat beberapa penekanan tombol di sana, atau menyetel default umum "origin" dan "master".

Steven Garcia
sumber
1
Bisakah Anda memberikan beberapa detail lebih lanjut tentang cara menyiapkan fungsi bash ini?
adaam
1
Dengan asumsi Anda menggunakan OSX atau Linux, Anda dapat menyalin fungsi-fungsi ini dan menempatkannya di .profil Anda (harus ada di folder rumah Anda, jika tidak, buatlah). Buka jendela konsol baru dan perintah tersebut akan tersedia untuk Anda. Setiap perubahan yang dibuat pada file-file ini akan meminta Anda untuk menyegarkan sesi bash sehingga Anda dapat mempercepat dengan menambahkan alias berikut ke file itu: alias ea = "subl ~ / .profile" # subl adalah editor teks saya, gantikan dengan milik Anda sendiri alias er = "source ~ / .profile" # ini akan mereset Sekarang ketika Anda ingin menambahkan pintasan Anda cukup mengetik "ea" (edit alias) Dan untuk menyegarkan er
Steven Garcia
2
Jika Anda disebut script git-comdan git-zap(tanpa ekstensi) dan menempatkan mereka di suatu tempat git dapat menemukan mereka (yaitu suatu tempat di PATH Anda), git memperlakukan mereka seperti perintah git biasa dan Anda dapat meminta mereka seperti ini: git com,git zap origin master
Manuzor
1
di pesta itu salah satu function gitcom {atau gitcom() {TMK, perbaiki?
2

Git membutuhkan komit untuk memiliki komentar, jika tidak, Git tidak akan menerima komit.

Anda dapat mengkonfigurasi template default dengan git sebagai pesan komit default Anda atau dapat mencari tanda --allow-empty-message di git. Saya pikir (tidak 100% yakin) Anda dapat mengkonfigurasi ulang git untuk menerima pesan komit kosong (yang bukan ide yang bagus). Biasanya setiap komit harus sedikit pekerjaan yang dijelaskan oleh pesan Anda.

Daniel Kurka
sumber
1
Tidak yakin mengapa jawaban ini ditolak. Saya setuju bahwa memaksa Git untuk menerima pesan komit kosong, atau menggunakan pesan seperti 'simpan', adalah ide yang buruk. Berhenti melawannya, dan pelajari saja alat sialan itu.
Jezen Thomas
2

Saya memiliki konfigurasi berikut dalam proyek pribadi saya:

git config alias.auto 'commit -a -m "changes made from [device name]"'

Dengan begitu, saat saya sedang terburu-buru, saya melakukannya

git auto
git push

Dan setidaknya saya tahu dari perangkat apa commit itu dibuat.

e18r
sumber
1

Saya menemukan solusi paling sederhana:

git commit -am'save'

Itu saja, Anda akan mengatasi hal-hal pesan git commit.

Anda bahkan dapat menyimpan pujian itu ke pesta atau hal lain untuk membuatnya lebih sederhana.

Anggota tim kami selalu menulis pesan tersebut, tetapi hampir tidak ada yang akan melihat pesan itu lagi.

Pesan komitmen adalah hal yang menghabiskan waktu setidaknya di tim kami, jadi kami mengabaikannya.

pria perunggu
sumber
-5

Pesan komit adalah praktik terbaik yang harus diikuti setiap saat. Kecuali Anda satu-satunya pengembang dan itu tidak akan berubah dalam waktu dekat.

git commit -a -m 'asdfasdfadsfsdf'
coloradoblue.dll
sumber
itu semacam lelucon. Tetapi untuk sedikit komitmen yang HARUS Anda lakukan untuk mengirimkan perubahan ke heroku (misalnya), tidak masalah dalam contoh pengembang tunggal.
coloradoblue