İki Git şubesinin en son ortak atalarını nasıl bulabilirim?
İki Git şubesinin en son ortak atalarını nasıl bulabilirim?
Yanıtlar:
Arıyorsun git merge-base. Kullanımı:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git log master...HEAD
--octopus, doğru sonucu elde etmek için bayrağı geçmeleri gerektiğini not etmelidir . Açık ama yanlış git merge-base branch1 branch2 branch3size bir taahhüt verecektir, ancak dokümanlardaki Tartışma bölümünde açıklandığı gibi , her üç dalın da ortak bir atası değildir .
git diff master...feature
mevcut (büyük olasılıkla çoklu taahhüt) özellik dalınızın tüm yeni taahhütlerini gösterir.
man git-diff belgeler:
git diff A...B
aynıdır:
git diff $(git merge-base A B) B
ancak ...yazması ve hatırlaması daha kolaydır.
Dave'in belirttiği gibi , özel durumu HEADatlanabilir. Yani:
git diff master...HEAD
aynıdır:
git diff master...
mevcut dal ise bu yeterlidir feature.
Son olarak, siparişin önemli olduğunu unutmayın! Bunu git diff feature...masteryaptığınızda, açık masterolmayan değişiklikler gösterilir feature.
Daha fazla git komutunun sözdizimini desteklemesini dilerdim, ama yaptıklarını sanmıyorum. Ve hatta bazıları için farklı semantikler var ...: Git taahhüt aralıklarında çift nokta ".." ve üçlü nokta "..." arasındaki farklar nelerdir?
git diff master...özel durumdaHEAD
git diff origin/branchname...
Önceki bir cevapta belirtildiği gibi git merge-baseçalışır:
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
ancak myfeaturegeçerli dal ise, yaygın olduğu gibi, kullanımı kullanabilirsiniz --fork-point:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Bu argüman sadece git'in son sürümlerinde işe yarar. Ne yazık ki her zaman işe yaramıyor ve neden olduğu belli değil. Lütfen bu cevabın sonuna doğru belirtilen sınırlamalara bakınız .
Tüm taahhüt bilgileri için şunları göz önünde bulundurun:
$ git log -1 $(git merge-base --fork-point develop)
git version 2.14.1.windows.1. Koşu git merge-base --fork-point branch2bir şube ile (kendi kaydedilmesini birlikte) olduğunu bildiğim hiçbir sonuç vermez geçerli şubesinden çatallı olan, oysa git merge-base branch1 branch2doğru çatal noktasını gösterir. Sorun ne olabilir?
branch2ve ardından çalıştırın git merge-base --fork-point branch1.
gitkAğacın neye benzediğini görmek için grafiksel bir gösterim görüntüleyici, örn . Vb. Kullanın . Belki cevabını alacaksın.
git merge-base branch1 branch2. Ama garip olan --fork-pointher iki şekilde de hiçbir şey vermiyor. İstediğiniz gibi çalıştığını onayladınız mı?