Jak znaleźć najnowszego wspólnego przodka dwóch gałęzi Git?
Jak znaleźć najnowszego wspólnego przodka dwóch gałęzi Git?
Odpowiedzi:
Szukasz git merge-base. Stosowanie:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
git log master...HEAD
--octopusflagę, aby uzyskać właściwy wynik. Oczywistym-ale-nie tak git merge-base branch1 branch2 branch3daje popełnić, ale, jak to opisano w dziale dyskusji w Dokumentach, to nie jest koniecznie wspólny przodek wszystkich trzech oddziałów.
git diff master...feature
pokazuje wszystkie nowe zatwierdzenia twojej bieżącej gałęzi funkcji (prawdopodobnie wielokrotnego zatwierdzenia).
man git-diff dokumenty, które:
git diff A...B
jest taki sam jak:
git diff $(git merge-base A B) B
ale ...łatwiej jest pisać i zapamiętywać.
Jak wspomniał Dave , szczególny przypadek HEADmożna pominąć. Więc:
git diff master...HEAD
jest taki sam jak:
git diff master...
co wystarczy, jeśli obecna gałąź to feature.
Na koniec pamiętaj, że kolejność ma znaczenie! Robićgit diff feature...master spowoduje wyświetlenie zmian, które masternie są włączone feature.
Chciałbym, żeby więcej komend git obsługiwało tę składnię, ale nie sądzę, żeby to zrobiły. A niektóre mają nawet inną semantykę ...: Jakie są różnice między podwójnymi kropkami „..” a potrójnymi kropkami „...” w zakresach zatwierdzania Git?
git diff master...w szczególnym przypadku różnicHEAD
git diff origin/branchname...
Jak wspomniano w poprzedniej odpowiedzi, git merge-basedziała:
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
ale jeśli myfeaturejest to bieżąca gałąź, co jest powszechne, możesz użyć use --fork-point:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Ten argument działa tylko w wystarczająco aktualnych wersjach git. Niestety nie zawsze to działa i nie jest jasne, dlaczego. Proszę odnieść się do ograniczeń zanotowanych na końcu tej odpowiedzi .
Aby uzyskać pełne informacje o zatwierdzeniu, rozważ:
$ git log -1 $(git merge-base --fork-point develop)
git version 2.14.1.windows.1. Uruchamianie git merge-base --fork-point branch2z gałęzią (z własnymi zatwierdzeniami), która, jak wiem , rozwidliła się z bieżącej gałęzi, nie daje żadnego rezultatu, podczas gdy git merge-base branch1 branch2poprawnie pokazuje punkt rozwidlenia. Co może być problemem?
branch2a następnie uruchom git merge-base --fork-point branch1.
gitkItp., Aby zobaczyć, jak wygląda drzewo. Może dostaniesz swoją odpowiedź.
git merge-base branch1 branch2. Ale dziwne jest to, że --fork-pointnic nie daje. Czy potwierdziłeś, że działa on zgodnie z przeznaczeniem?
Dzięki gitkniemu możesz wyświetlić dwie gałęzie graficznie:
gitk branch1 branch2
A potem łatwo jest znaleźć wspólnego przodka w historii dwóch gałęzi.