Git neden çekme sonrası birleştirme taahhüdü mesajı istiyor?


142

Son zamanlarda, herhangi birini takiben git pull, metin düzenleyicimi oluşturmaya ve bir birleştirme taahhüdü mesajı istemeye başladı. Bir tamamlama mesajı zaten önceden doldurulmuştur ve çekme işlemini tamamlamak için pencereyi kaydetmem ve kapatmam gerekiyor.

Geçmişte, birleştirmeyi sessizce, standart bir taahhüt mesajıyla (satırları boyunca Merge branch 'dev' of remote.com:/repo into dev) yapardı .

Son zamanlarda git 1.7.11.3 sürümüne (homebrew aracılığıyla) güncelledim, ancak bu davranışı değiştirmek için yapmış olabileceğim başka bir şey düşünemiyorum. Bu bir ayar mı yoksa eski haline geri dönmenin başka bir yolu var mı?

Yanıtlar:


157

Git 1.7.10'da git geliştiricileri birleştirme işlemlerinin çok kolay yapılabileceğine karar verdiler. Bu blog yazısında açıklandığı gibi , etkileşimli taahhüt mesajı davranışını zorlamak, taahhüt edilen mesajları daha ayrıntılı hale getirmeli ve gereksiz birleştirmelerin genel sıklığını azaltabilir.

--no-editBu davranışı önlemek için bayrağı kullanabilirsiniz , ancak, yapmayın. Birleştirme taahhütleri, tarihe yapılan tüm taahhütler gibi iyi yapılandırılmalıdır. Geçmişiniz faydalı olmaktan başka bir şey olmamalıdır.


54
Yardım için teşekkürler. Birleştirme taahhütlerinin her zaman açıklayıcı olması gerektiğini kabul etmiyorum. Buna bakmamın sebebi, çektiğim her seferde otomatik birleşmelerin birleştirme neden gerekli olduğunu açıklamamı istemesi, çünkü herhangi bir değişiklik olmadığında bile bunu yapmanın mantıksız hale gelmesi.
Brian

10
Bu aynı zamanda bu davranışı önlemek için yararlı bir kaynaktır: longair.net/blog/2009/04/16/git-fetch-and-merge Sen kaçınarak olmalıdır git pull; kullanmak git merge --ff-onlysadece güncelleme çalıştığınız ve size tüm yerel değişiklikler olduğunu sanmıyorum eğer; kullanmak git merge --no-ffaslında bir şube birleştirmek için çalışıyorsanız.
Glif'i

6
Bunu kapatmak için bir yapılandırma bayrağı var mı? Her seferinde --no-edit yazmak zorunda olmak can sıkıcı bir durum.
LandonSchropp

Muhteşem. @Christopher'ı paylaştığın için teşekkürler.
LandonSchropp

3
@SeanCoetzee: Bu, $EDITORayarınıza bağlıdır , ancak OSX'te git kutusundan çıkıyorsanız, muhtemelen 'vi' adlı bir programdır . Tip i"INSERT" moduna girmek için; Mesajını yaz. Daha sonra kaydedip çıkıp ESCyazarak çıkabilirsiniz :wq.
Christopher

58

İleride kullanmak üzere bir kısayol oluşturmak için şunlardan birini yapın: -

Düzenlemenizle ~/.gitconfigaşağıdaki:

[core]
    mergeoptions = --no-edit

Veya Terminal'de aşağıdakileri yürütün

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


13
Bu benim için işe yaramadı (OSX'te git) ve çıkışına bakarak doğru şekilde ayarladım git config --global core.mergeoptions.
jvannistelrooy

terminal komutu aşağıdaki gibi olmalıdırgit config core.mergeoptions --no-edit
S. Mert

@SimsekMert, sadece mevcut arşivdeki .gitconfig'i düzenleyecek, her git deposu için küresel olarak değil
Dallas Clark

@AbhishekGoel, değişikliklerin etkili olması için Terminal'i yeniden başlatmanız gerekebilir
Dallas Clark

@jvannistelrooy değişikliklerin etkili olması için Terminal'i yeniden başlatmanız gerekebilir
Dallas Clark

11

İlk olarak, yukarıdaki Christopher cevabındaki uyarılara dikkat edin.

Ardından, otomatik birleştirme tamamlama iletisi düzenlemesini hala devre dışı bırakmak istiyorsanız, bu ortam değişkenini ayarlayın:

    GIT_MERGE_AUTOEDIT=no

Bu ortam değişkeni ve "hayır" ayarı git merge doc sayfasında belgelenmiştir . Yalnızca etkileşimli olmayan bir şekilde birleştirilmesi gereken komut dosyalarında kullanılması önerilir, ancak elbette etkilerini daha kalıcı hale getirmek için kabuk ortamınızın bir parçası olarak ayarlanabilir.


Bunun --no-editbayrağı kullanmaktan ne kadar farklı olabileceğini açıklayabilir misiniz ?
Alexander Mills

2
İşlevsel bir fark bilmiyorum, ama kolaylık faktörü bunu değerli kılıyor. --no-editBayrağı burada Dallas Clark'ın yanıt açıklandığı gibi ortamlarda çalışması görünmemektedir gibi her kullanımla komut satırında tekrarlanmalıdır. Ortam değişkenini ayarlamak, bu ayarı yapmayı bilmemin tek yoludur.
emackey
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.