Jak znaleźć najnowszego wspólnego przodka dwóch gałęzi Git?Znajdź najnowszy wspólny przodek dwóch gałęzi Git
Odpowiedz
Szukasz git merge-base
. Zastosowanie:
$ git merge-base branch2 branch3
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Należy zauważyć, że znajduje to najnowszy wspólny przodek ... który Uważam, że jest to, czego chce pytający, więc +1. Zauważając to, na wypadek gdyby ktoś tu przyszedł, próbując znaleźć * najstarszego * wspólnego przodka (tak jak ja) - dla którego zobacz także: http://stackoverflow.com/questions/1527234/finding-a-branch-point -with-git – lindes
Prawdopodobnie tego szukał, ale strona man nie gwarantuje, że będzie najnowsza ani w czasie rzeczywistym, ani w liczbie zatwierdzeń: tylko, że będzie to jeden z najlepszych wspólnych przodków. –
Myślę, że będę używał tego małego fragmentu: '$ (git merge-base master HEAD)'. Na przykład: 'git log $ (git merge-base HEAD master) .. HEAD' – funroll
Po nabyciu wspólny przodek SHA mogą być stosowane, na przykład, aby wyświetlić dostępne rewizje na pilocie, tak:
#!/bin/bash
git remote update
REMBR=`git show-remote-branch`
REMHEAD=`git rev-parse $REMBR`
MERGEBASE=`git merge-base HEAD $REMBR`
REMURL=`git config remote.origin.url`
git request-pull $MERGEBASE $REMURL $REMHEAD
Wydaje się to dość styczne w stosunku do tego, co zostało zadane. –
git diff master...feature
pokazy wszystkie nowe zatwierdzenia twojej aktualnej gałęzi (prawdopodobnie wielokrotnego zatwierdzenia).
man git-diff
dokumenty:
git diff A...B
jest taka sama, jak:
git diff $(git merge-base A B) B
ale ...
łatwiej jest wpisać i zapamiętać.
Jak wspomniano by Dave, specjalny przypadek HEAD
można pominąć. Więc:
git diff master...HEAD
jest taka sama, jak:
git diff master...
co wystarcza, jeśli bieżąca gałąź jest feature
.
Wreszcie, pamiętaj, że kolejność ma znaczenie! Wykonanie git diff feature...master
spowoduje wyświetlenie zmian, które są na master
, a nie na feature
.
Chciałbym, aby więcej poleceń git obsługiwało tę składnię, ale nie sądzę, że tak. A niektóre nawet mają różne semantykę dla ...
: What are the differences between double-dot ".." and triple-dot "..." in Git commit ranges?
Lub po prostu 'git diff master ...' w szczególnym przypadku diffing do 'HEAD' – Dave
Z gitk
można zobaczyć dwa oddziały graficznie:
gitk branch1 branch2
i wtedy jest to łatwe do znalezienia wspólnego przodka w historii obu oddziałów.
Nie wszystko można zrobić wizualnie w każdym przypadku. Istnieją powody, dla których może być konieczne automatyczne programowanie. – ADTC
Jak wspomniano we wcześniejszej odpowiedzi, git merge-base
utwory:
$ git merge-base myfeature develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
ale jeśli myfeature
jest obecny oddział, co jest powszechne, można użyć użytku --fork-point
:
$ git merge-base --fork-point develop
050dc022f3a65bdc78d97e2b1ac9b595a924c3f2
Ten argument działa tylko w odpowiednio nowszych wersjach gita. Zobacz także this answer.
Dla pełnej popełnienia informacji, należy rozważyć:
$ git log -1 $(git merge-base --fork-point develop)
Mam 'git wersji 2.14.1.windows.1'. Uruchamianie 'git merge-base --fork-point branch2' z odgałęzieniem _ (z własnymi commitami) _ że ** Wiem ** rozwidlało się z bieżącej gałęzi nie daje żadnego wyniku, podczas gdy' git merge-base branch1 branch2' poprawnie pokazuje punkt rozwidlenia. Jaki może być problem? – ADTC
@ADTC Kasa 'branch2', a następnie uruchom' git merge-base --fork-point branch1'. –
Tak, zrobiłem to. Nic nie pojawiło się ponownie. – ADTC
- 1. Znajdź największy wspólny podtyp dwóch rodzajów Scala
- 2. Wspólny przodek do tablicy Javy i listy
- 3. Znajdź najdłuższy wspólny przedrostek?
- 4. Git Checkout Najnowszy tag
- 5. git diff dwóch plików o tej samej gałęzi, samych popełnić
- 6. Problem algorytmu - znajdź najmniejszy wspólny podzbiór
- 7. Organizowanie gałęzi git
- 8. Git: zapisywanie starych gałęzi
- 9. Przełączanie gałęzi w git
- 10. Znajdź najnowszy rekord w Railsach 3
- 11. Zmiana nazw gałęzi w git
- 12. Git Skopiuj folder z gałęzi głównej do innej gałęzi
- 13. Porównaj foo.bar z dwóch różnych gałęzi w MAGIT
- 14. Git: Znajdź skasowany kod
- 15. CSS Rodzic/Przodek Selector
- 16. Python: Znajdź najnowszy plik z rozszerzeniem .MP3 w katalogu
- 17. Wspólny algorytm generowania diff pól w dwóch komponentach bean?
- 18. Euklidesowy największy wspólny dzielnik dla więcej niż dwóch liczb
- 19. git: pobierz pliki z innej gałęzi do bieżącej gałęzi (nie przełączaj HEAD do drugiej gałęzi)
- 20. git problemem - ale oderwane od gałęzi
- 21. Git: Zapobiegaj zatwierdzeniom w gałęzi głównej
- 22. Git - osobny folder dla każdej gałęzi. Konfigurowanie
- 23. przełączanie gałęzi git bez plików checkout
- 24. Usuń wiele plików z gałęzi filtra git
- 25. Tymczasowe usuwanie funkcji z gałęzi Git
- 26. Git: przenieś konkretne zatwierdzenia do innej gałęzi
- 27. Odwołanie do początku gałęzi Git referencji
- 28. Jak poprawnie używać git i gałęzi
- 29. Tworzenie gałęzi wewnątrz oddziału w git
- 30. Jak wyciągnąć usunięcie gałęzi w git?
Definiowanie najnowsza: czas rzeczywisty świat, liczbę zatwierdzeń, inne metryki? –
Odnośne (krzyżowanie krzyżowe): http://stackoverflow.com/questions/26370185/how-do-criss-cross-merges-arise-in-git – Jubobs