Bulma Gıt ile şube bir nokta?
Şubeler usta ve bir havuz ve iki arasında birleştirme etkinliği var. Nasıl şube ustası dayalı oluşturulduğunda benim depo tamamlama bulabilirim?
Benim depo temel olarak bu gibi görünüyor:
-- X -- A -- B -- C -- D -- F (master)
\ / \ /
\ / \ /
G -- H -- I -- J (branch A)
git merge-base (--all)
bulur ne olduğu değil, revizyon, arıyorum.
CEVAP
Aynı şeyi arıyordum ve buldum. Bunu sorduğunuz için teşekkür ederim!
Ancak, burada gördüğüm cevap gelmiyor buldumoldukçaG
ver gibiler etmek için (ya arıyordum bu talep, yerine A
commit cevap ver.
Bu yüzden, aşağıdaki ağaç (mektuplar kronolojik sıraya göre atanan) yarattık, bir şeyleri test etmek istiyorum diye
A - B - D - F - G <- "master" branch (at G)
\ \ /
C - E --' <- "topic" branch (still at E)
Bu grafik, senin bahsediyor) B, ama Bir (D ya da E değil) var, gidip de emin olmak istedim çünkü biraz seninkinden farklı görünüyor. Burada harfler önekleri SHA ve mesajlar (benim repo varsa herkes için ilginç here, klonlanmış olabilir) taahhüt bağlı:
G: a9546a2 merge from topic back to master
F: e7c863d commit on master after master was merged to topic
E: 648ca35 merging master onto topic
D: 37ad159 post-branch commit on master
C: 132ee2a first commit on topic branch
B: 6aafd7f second commit on master before branching
A: 4112403 initial commit on master
Yaniamaç: B bulun. Burada, biraz tamirattan sonra bulduğum üç yolu vardır:
1. görsel olarak, gitk ile:
Görsel olarak böyle bir ağaç master bakıldığında () görmelisiniz:
ya da konuya bakıldığında () burada:
her iki durumda da, benim grafikte B
taahhüt seçtim. Tıkladığınızda, tam SHA sadece grafiğin altındaki metin giriş alanında gösterilir.
2. görsel olarak, ama terminalden:
git log --graph --oneline --all
gösterir (git config --global color.ui auto
varsayarsak):
Ya da, düz metin içinde:
* a9546a2 merge from topic back to master |\ | * 648ca35 merging master onto topic | |\ | * | 132ee2a first commit on topic branch * | | e7c863d commit on master after master was merged to topic | |/ |/| * | 37ad159 post-branch commit on master |/ * 6aafd7f second commit on master before branching * 4112403 initial commit on master
her iki durumda da, sizin 6aafd7f en küçük ortak noktası olarak işlemek, yani B
benim grafikte, ya da A
görüyoruz.
3. Shell magic:
Yukarıda, ya da sadece bir gözden geçirecek tek bir komut, ve başka bir şey gibi bir şey isteyip istemediğini sorunuzu belirtmeniz yok. İşte ikincisi:
diff -u <(git rev-list --first-parent topic) \
<(git rev-list --first-parent master) | \
sed -ne 's/^ //p' | head -1
6aafd7ff98017c816033df18395c5c1e7829960d
Ayrıca ~/içine koyabilirsiniz.olarak gitconfig(not: çizgi izleyen önemli; teşekkürler 33 ** buna dikkat çekmesi için):
[alias]
oldest-ancestor = !zsh -c 'diff -u <(git rev-list --first-parent "${1:-master}") <(git rev-list --first-parent "${2:-HEAD}") | sed -ne \"s/^ //p\" | head -1' -
Aşağıdaki (Alıntı ile karmaşık) komut satırı yapılabilir:
git config --global alias.oldest-ancestor '!zsh -c '\''diff -u <(git rev-list --first-parent "${1:-master}") <(git rev-list --first-parent "${2:-HEAD}") | sed -ne "s/^ //p" | head -1'\'' -'
Not: zsh
kolayca ** 25, ama sh
olabilirdideğil-- <()
sözdizimi iş vanilya sh
yok. (Tekrar, @conny, bana bunun farkında bu sayfada başka bir cevap, bir açıklama yaptığınız için çok teşekkür ederiz!)
Not: Yukarıdaki: sürüm Alternatif
Teşekkürler liori pointing out yukarıda olabilir düşme karşılaştırırken aynı dalları ve gelecek ile bir diğer fark oluşturan kaldırır sed formdan karışımı, ve bu "güvenli" (yani bir sonuç döndürür (yani, en son commit) bile karşılaştırmak yöneticisi):
Gibi .git-config satır:
[alias]
oldest-ancestor = !zsh -c 'diff --old-line-format='' --new-line-format='' <(git rev-list --first-parent "${1:-master}") <(git rev-list --first-parent "${2:-HEAD}") | head -1' -
Kabuk: den
git config --global alias.oldest-ancestor '!zsh -c '\''diff --old-line-format='' --new-line-format='' <(git rev-list --first-parent "${1:-master}") <(git rev-list --first-parent "${2:-HEAD}") | head -1'\'' -'
Yani, benim test ağacında bir süre için kullanılamaz, özür dilerim, geri geldi, şimdi hem ana hem de konu (G ve B tamamlar, sırasıyla vererek) üzerinde çalışır. Tekrar teşekkürler,, diğer formu için liori.
Yani, ben [ve liori] ile geldi. Benim için iş gibi görünüyor. Aynı zamanda kullanışlı kanıtlamak olabilir diğer adları ek bir çift sağlar:
git config --global alias.branchdiff '!sh -c "git diff `git oldest-ancestor`.."'
git config --global alias.branchlog '!sh -c "git log `git oldest-ancestor`.."'
Mutlu-ıng git!
Ne kadar uzak ana şube için yerel bir ...
GİT: 'birleştirme yerine 'üz...
Nasıl'un repo başkasından uzak şu...
Nasıl yerel şube yeniden?...
pip github repo şube yükleyin...