Mengapa git meminta saya untuk melakukan pesan gabungan pasca-tarik?

142

Baru-baru ini, mengikuti apa pun git pull, git telah mulai menelurkan editor teks saya, dan meminta pesan gabungan. Pesan komit sudah diisi sebelumnya, dan saya hanya perlu menyimpan dan menutup jendela untuk menyelesaikan tarikan.

Di masa lalu, itu akan melakukan penggabungan diam-diam, dengan pesan komit standar (di sepanjang baris Merge branch 'dev' of remote.com:/repo into dev).

Saya baru-baru ini memperbarui git ke versi 1.7.11.3 (via homebrew), tetapi tidak dapat memikirkan hal lain yang mungkin telah saya lakukan untuk mengubah perilaku ini. Apakah ini pengaturan, atau adakah cara lain untuk kembali seperti semula?

shanebonham
sumber

Jawaban:

157

Di git 1.7.10, pengembang git memutuskan menggabungkan komit bisa dibuat dengan mudah. Seperti yang dijelaskan dalam posting blog ini, memaksa perilaku pesan komit interaktif harus membuat pesan komit tersebut lebih rinci dan dapat mengurangi frekuensi keseluruhan penggabungan yang tidak perlu.

Anda dapat menggunakan --no-editbendera untuk menghindari perilaku ini, tetapi, yah, jangan. Komitmen gabungan, seperti komitmen pada sejarah, harus dibangun dengan baik. Riwayat Anda seharusnya bermanfaat.

Christopher
sumber
54
Terima kasih untuk bantuannya. Saya tidak setuju bahwa menggabungkan komitmen harus selalu deskriptif. Alasan saya melihat ini adalah karena penggabungan otomatis setiap kali saya menarik meminta saya untuk menjelaskan mengapa penggabungan diperlukan, yang dengan cepat menjadi tidak masuk akal karena bahkan melakukan itu ketika saya tidak memiliki perubahan.
Brian
10
Ini juga merupakan sumber yang berguna untuk menghindari perilaku ini: longair.net/blog/2009/04/16/git-fetch-and-merge Anda harus menghindari git pull; gunakan git merge --ff-onlyjika Anda hanya mencoba untuk memperbarui dan Anda tidak berpikir Anda memiliki perubahan lokal; gunakan git merge --no-ffjika Anda benar-benar mencoba untuk menggabungkan cabang.
Glyph
6
Apakah ada bendera config untuk mematikan ini? Sangat menjengkelkan harus mengetik --tidak-edit setiap saat.
LandonSchropp
Luar biasa. Terima kasih telah berbagi @Christopher.
LandonSchropp
3
@SeanCoetzee: Tergantung pada $EDITORpengaturan Anda , tetapi jika Anda menggunakan git di luar kotak pada OSX itu mungkin sebuah program yang disebut 'vi' . Ketik iuntuk masuk ke mode "INSERT"; Ketik pesan anda. Anda kemudian dapat menyimpan dan berhenti dengan menekan ESCdan kemudian mengetik :wq.
Christopher
58

Untuk membuat pintasan untuk penggunaan di masa mendatang, baik: -

Edit Anda ~/.gitconfigdengan yang berikut:

[core]
    mergeoptions = --no-edit

Atau jalankan perintah berikut di Terminal

git config --global core.mergeoptions --no-edit

Dallas Clark
sumber
13
Ini tidak bekerja untuk saya (git di OSX), dan saya sudah mengaturnya dengan benar, melihat output dari git config --global core.mergeoptions.
jvannistelrooy
perintah terminal harus seperti di bawah inigit config core.mergeoptions --no-edit
S. Mert
@SimsekMert yang hanya akan mengedit .gitconfig di repositori saat ini, tidak secara global untuk setiap repositori git
Dallas Clark
@AbhishekGoel ada kemungkinan Anda perlu me-restart Terminal agar perubahan diterapkan
Dallas Clark
@jvannistelrooy ada kemungkinan Anda mungkin harus memulai ulang Terminal agar perubahan dapat diterapkan
Dallas Clark
11

Pertama, perhatikan peringatan dalam jawaban Christopher di atas.

Kemudian, jika Anda masih ingin menonaktifkan pengeditan pesan komit gabungan otomatis, tetapkan variabel lingkungan ini:

    GIT_MERGE_AUTOEDIT=no

Variabel lingkungan ini dan pengaturan "tidak" nya didokumentasikan pada halaman doc git merge . Disarankan untuk menggunakannya hanya dalam skrip yang perlu menggabungkan non-interaktif, tetapi tentu saja dapat ditetapkan sebagai bagian dari lingkungan shell Anda untuk membuat efeknya lebih permanen.

Emackey
sumber
Bisakah Anda menjelaskan bagaimana ini mungkin berbeda dari menggunakan --no-editbendera?
Alexander Mills
2
Saya tidak tahu perbedaan fungsional, tetapi faktor kenyamanan membuatnya berharga. The --no-editbendera harus diulang pada baris perintah dengan masing-masing penggunaan, karena tidak muncul untuk bekerja dalam pengaturan seperti yang dijelaskan dalam jawaban Dallas Clark di sini. Mengatur variabel lingkungan adalah satu-satunya cara yang saya tahu untuk membuat pengaturan ini tetap.
emackey