Różne metody poniżej są pragmatyczne, przydatne sposoby pracy wnioskować o prawdopodobnej odpowiedzi, ale Zauważmy, że w git sama kwestia jest nieporozumienie, popełnia nie pochodzą z oddziałów. Oddziały przychodzą i odchodzą, poruszają się, tylko zatwierdzenia reprezentują prawdziwą historię repo. Z drugiej strony nie jest to sposób na stwierdzenie, że poniższe rozwiązania są złe. Tylko wiedz, że żaden z nich nie daje w pełni wiarygodnej odpowiedzi, której nie można uzyskać z założenia w git. (Prosta sprawa zostanie usunięte oddziały: I oddział, oddaję dwa razy, mogę połączyć do innego oddziału, usunę pierwszy oddział Skąd commit „pochodzić” z.?
RomainValeri
1
Mam przypadek, w którym wyraźnie pobieram płytki z głębokości 1 z tagu. Jest tani, łatwy i wydajny ... i do tej pory zrobił wszystko, co chciałem pięknie. Teraz, gdy chciałbym wiedzieć, na której gałęzi był tag, jestem zachwycony, przynajmniej dla tego szczegółu. Nie zawsze możesz iść do domu, lol
Paul Hodges
Odpowiedzi:
864
Chociaż Dav ma rację, że informacje nie są bezpośrednio przechowywane, to nie znaczy, że nigdy nie dowiesz się. Oto kilka rzeczy, które możesz zrobić.
Znajdź gałęzie, na których zatwierdzenie jest włączone
git branch -a --contains <commit>
To powie ci wszystkie gałęzie, które mają dane zatwierdzenie w swojej historii. Oczywiście jest to mniej przydatne, jeśli zatwierdzenie zostało już połączone.
Szukaj w reflogs
Jeśli pracujesz w repozytorium, w którym dokonano zatwierdzenia, możesz przeszukać dzienniki referencyjne w poszukiwaniu tego zatwierdzenia. Reflogi starsze niż 90 dni są przycinane przez git-gc, więc jeśli zatwierdzenie jest za stare, nie znajdziesz go. To powiedziawszy, możesz to zrobić:
git reflog show --all | grep a871742
znaleźć zatwierdzić a871742. Zauważ, że MUSISZ użyć skrótu 7 pierwszych cyfr zatwierdzenia. Wynik powinien być mniej więcej taki:
a871742 refs/heads/completion@{0}: commit (amend): mpc-completion: total rewrite
wskazując, że zatwierdzenie zostało dokonane w gałęzi „zakończenie”. Domyślne wyjście pokazuje skrócone skróty zatwierdzania, więc nie szukaj pełnego skrótu, bo nic nie znajdziesz.
git reflog showjest właściwie tylko aliasem git log -g --abbrev-commit --pretty=oneline, więc jeśli chcesz majstrować przy formacie wyjściowym, aby udostępnić różne rzeczy do grep, to jest twój punkt wyjścia!
Jeśli nie pracujesz w repozytorium, w którym dokonano zatwierdzenia, najlepsze, co możesz zrobić w tym przypadku, to przejrzeć dzienniki logowania i dowiedzieć się, kiedy zatwierdzenie zostało po raz pierwszy wprowadzone do repozytorium; przy odrobinie szczęścia trafiłeś do gałęzi, do której był zaangażowany. Jest to nieco bardziej skomplikowane, ponieważ nie można jednocześnie przejść do drzewa zatwierdzeń i dzienników zmian. Chcesz przeanalizować dane wyjściowe dziennika ponownego sprawdzenia, sprawdzając każdy skrót, aby sprawdzić, czy zawiera on pożądany zatwierdzenie, czy nie.
Znajdź kolejne zatwierdzenie scalania
Jest to zależne od przepływu pracy, ale przy dobrych przepływach pracy zatwierdzenia są dokonywane w gałęziach programistycznych, które są następnie scalane. Możesz to zrobić:
git log --merges <commit>..
aby zobaczyć zatwierdzenia scalania, które mają dane zatwierdzenie jako przodka. (Jeśli zatwierdzenie zostało scalone tylko raz, pierwszym powinno być scalenie, którego szukasz; w przeciwnym razie będziesz musiał zbadać kilka). Komunikat zatwierdzenia scalenia powinien zawierać nazwę gałęzi, która została scalona.
Jeśli chcesz na tym polegać, możesz użyć --no-ffopcji, git mergeaby wymusić utworzenie zatwierdzenia scalania nawet w przypadku szybkiego przewijania. (Nie bądź jednak zbyt chętny. To może stać się zaciemniające, jeśli będzie nadużywane) . Odpowiedź VonC na powiązane pytanie pomaga w opracowaniu tego tematu.
+1. Sam brak informacji na temat tego konkretnego problemu sprawia, że zastanawiasz się, czy to rzeczywiście problem? Oddziały można zmienić, zmienić nazwę lub usunąć w dowolnym momencie. Może być git describewystarczające, ponieważ (opatrzone komentarzem) tagi mogą być postrzegane jako bardziej znaczące niż gałęzie.
VonC
9
Zdecydowanie się zgadzam - gałęzie mają być lekkie i elastyczne. Jeśli przyjmiesz przepływ pracy, w którym informacje stają się ważne, możesz użyć --no-ffopcji, aby upewnić się, że zawsze istnieje zatwierdzenie scalania, dzięki czemu zawsze możesz śledzić ścieżkę danego zatwierdzenia, gdy jest on scalany w kierunku master.
Cascabel
32
Do Twojej wiadomości, jeśli chcesz znaleźć zatwierdzenia, które istnieją tylko na pilocie, dodaj -aflagę do pierwszego polecenia, np.git branch -a --contains <commit>
Jonathan Day,
8
@JathanathanDay: Nie, znajdzie zatwierdzenia w dowolnym oddziale. Jeśli chcesz tylko te na pilocie, użyj -r.
Cascabel
7
@ SimonTewsi Tak jak powiedziałem, jeśli to naprawdę problem, użyj, merge --no-ffaby niezawodnie zarejestrować nazwę oddziału podczas scalania. Ale inaczej pomyśl o nazwach oddziałów jako tymczasowych krótkich etykietach i zatwierdzaj opisy jako stałe. „Jaką krótką nazwą odnosiliśmy się do tego podczas programowania?” tak naprawdę nie powinno być tak ważnego pytania jak „co robi to zatwierdzenie?”
Cascabel
154
To proste polecenie działa jak urok:
git name-rev <SHA>
Na przykład (gdzie gałąź testowa to nazwa gałęzi):
To idealne rozwiązanie zajęło tylko 8 lat. Dzięki!
S1J0
6
Okazało git name-rev --name-only <SHA>się, że jestem bardziej przydatny do uzyskania tylko nazwy oddziału. Moje pytanie ... Czy może zwrócić więcej niż jeden oddział w jakichkolwiek okolicznościach?
git-what-branch(Skrypt Perla, patrz poniżej) nie wydaje się już utrzymywany.
git-when-mergedto alternatywa napisana w Pythonie, która działa dla mnie bardzo dobrze.
Sprawdź, kiedy zatwierdzenie zostało scalone w co najmniej jedną gałąź.
Znajdź zatwierdzenie scalania, które wprowadziło COMMITdo określonych ODDZIAŁÓW.
W szczególności poszukaj najstarszego zatwierdzenia w historii pierwszego rodzica, BRANCHktóry zawiera COMMITjako przodek.
Podaj nam (domyślnie) najwcześniejszą przyczynową ścieżkę zatwierdzeń i scaleń, aby żądane zatwierdzenie dotarło do nazwanego oddziału. Jeśli zatwierdzenia dokonano bezpośrednio w nazwanej gałęzi, jest to oczywiście najwcześniejsza ścieżka.
Przez najwcześniejszą ścieżkę przyczynową rozumiemy ścieżkę, która najwcześniej połączyła się w nazwanej gałęzi, przez czas zatwierdzenia (chyba że --topo-orderokreślono inaczej ).
WYDAJNOŚĆ
Jeśli wiele gałęzi (np. Setki) zawiera zatwierdzenie, system może zająć dużo czasu (dla konkretnego zatwierdzenia w drzewie Linuksa zajęło 8 sekund zbadanie gałęzi, ale było ponad 200 kandydujących gałęzi), aby wyśledzić ścieżkę do każdego zatwierdzenia.
Wybór konkretnego --reference-branch --reference tagdo zbadania będzie setki razy szybszy (jeśli masz setki kandydujących gałęzi).
PRZYKŁADY
# git-what-branch --all 1f9c381fa3e0b9b9042e310c69df87eaf9b46ea4
1f9c381fa3e0b9b9042e310c69df87eaf9b46ea4 first merged onto master using the following minimal temporal path:
v2.6.12-rc3-450-g1f9c381 merged up at v2.6.12-rc3-590-gbfd4bda (Thu May 5 08:59:37 2005)
v2.6.12-rc3-590-gbfd4bda merged up at v2.6.12-rc3-461-g84e48b6 (Tue May 3 18:27:24 2005)
v2.6.12-rc3-461-g84e48b6 is on master
v2.6.12-rc3-461-g84e48b6 is on v2.6.12-n
[...]
Ten program nie bierze pod uwagę skutków wybrania interesującego zatwierdzenia, tylko operacje scalania.
git-what-branchwydaje się, że nie jest już utrzymywany. git-when-scaled to alternatywa napisana w Pythonie, która działa dla mnie bardzo dobrze.
sschuberth,
@sschuberth dziękuję za tę aktualizację. W odpowiedzi umieściłem twój komentarz dla większej widoczności.
VonC,
37
Na przykład, aby znaleźć to c0118fazatwierdzenie pochodzi z redesign_interactions:
* ccfd449 (HEAD -> develop) Require to return undef if no digits found
* 93dd5ff Merge pull request #4 from KES777/clean_api
|\
| * 39d82d1 Fix tc0118faests for debugging debugger internals
| * ed67179 Move &push_frame out of core
| * 2fd84b5 Do not lose info about call point
| * 3ab09a2 Improve debugger output: Show info about emitted events
| * a435005 Merge branch 'redesign_interactions' into clean_api
| |\
| | * a06cc29 Code comments
| | * d5d6266 Remove copy/paste code
| | * c0118fa Allow command to choose how continue interaction
| | * 19cb534 Emit &interact event
Powinieneś uruchomić:
git log c0118fa..HEAD --ancestry-path --merges
I przewiń w dół, aby znaleźć ostatnie zatwierdzenie scalania . Który jest:
commit a435005445a6752dfe788b8d994e155b3cd9778f
Merge: 0953cac a06cc29
Author: Eugen Konkov
Date: Sat Oct 1 00:54:18 2016 +0300
Merge branch 'redesign_interactions' into clean_api
To było jedyne rozwiązanie, które dało mi pożądany rezultat. Spróbowałem reszty.
rzemieślnik
Zauważ, że działa to tylko wtedy, gdy podsumowania zatwierdzenia scalania zawierają nazwy gałęzi używane w połączeniach, co zwykle robią. Jednak git merge -m"Any String Here"zasłoni informacje o źródłowej i docelowej gałęzi.
qneill
@qneill: Nie, scalanie zawsze ma informacji o oddziałach łączonych: Merge: f6b70fa d58bdcb. Możesz nazwać swoje zatwierdzenie scalania tak jak ty. Nie będę miał znaczenia
Eugen Konkov
1
@EugenKonkov po przejściu gałęzi przez scalanie, historia, o której ścieżce na wykresie, z którego pochodzą, jest pozostawiona w dzienniku zmian, ale nie w bazie danych obiektów git.
Wysłałem
Wersja UPD działa dla mnie, proste polecenie, które znajduje oryginalne zatwierdzenie
vpalmu
9
git branch --contains <ref>to najbardziej oczywiste polecenie „porcelany”, aby to zrobić. Jeśli chcesz zrobić coś podobnego tylko z poleceniami „hydraulika”:
COMMIT=$(git rev-parse <ref>) # expands hash if needed
for BRANCH in $(git for-each-ref --format "%(refname)" refs/heads); do
if $(git rev-list $BRANCH | fgrep -q $COMMIT); then
echo $BRANCH
fi
done
Opcja biedny człowiek jest użycie narzędzia tig1 na HEAD, szukać zatwierdzenia, a następnie wizualnie śledzić linię od tego zobowiązać z powrotem aż do scalającej widać. Domyślny komunikat o scaleniu powinien określać, gdzie gałąź zostanie scalona :)
1 Tig to oparty na ncurses interfejs tekstowy dla Git. Działa głównie jako przeglądarka repozytorium Git, ale może także pomagać w stopniowaniu zmian dla zatwierdzenia na poziomie porcji i działać jako pager dla danych wyjściowych z różnych poleceń Git.
W ramach eksperymentu wykonałem przechwycenie po zatwierdzeniu, które przechowuje informacje o aktualnie wyewidencjonowanej gałęzi w metadanych zatwierdzenia. Zmodyfikowałem też nieco gitk, aby pokazać te informacje.
Szczerze mówiąc, nie wiedziałem, że istniały notatki git, kiedy to pisałem. Tak, użycie git notesów do osiągnięcia tego samego jest prawdopodobnie lepszym pomysłem.
pajp
3
Mam do czynienia z tym samym problemem ( potok Jenkins multibranch) - posiadanie tylko informacji o zatwierdzeniach i próba znalezienia nazwy oddziału, z którego pochodziło to zatwierdzenie. Musi działać dla zdalnych oddziałów, lokalne kopie nie są dostępne.
Z tym pracuję:
git rev-parse HEAD | xargs git name-rev
Opcjonalnie możesz usunąć dane wyjściowe:
git rev-parse HEAD | xargs git name-rev | cut -d' ' -f2 | sed 's/remotes\/origin\///g'
Jeśli OP próbuje ustalić historię , przez którą przeszedł oddział podczas tworzenia konkretnego zatwierdzenia („dowiedz się, z jakiej gałęzi pochodzi zatwierdzenie, biorąc pod uwagę jego wartość skrótu SHA-1”), to bez ponownego logowania nie ma żadnych rekordy w bazie danych obiektów Git, które pokazują, która nazwana gałąź była powiązana z jaką historią zatwierdzania.
(Opublikowałem to jako odpowiedź w odpowiedzi na komentarz).
Mam nadzieję, że ten skrypt ilustruje mój punkt widzenia:
Dane wyjściowe pokazują brak jakiegokolwiek sposobu, aby dowiedzieć się, czy zatwierdzenie z 'Add f1' pochodziło z gałęzi b1 czy b2 ze zdalnego klonu / tmp / r2.
A jakie są dane wyjściowe git log 80c10e5..HEAD --ancestry-path --merges --oneline --color | tail -n 1i git log 086c9ce..HEAD --ancestry-path --merges --oneline --color | tail -n 1polecenia dla obu przypadków?
Eugen Konkov
SHA oczywiście zmieniają się za każdym razem, gdy polecenia są uruchamiane, aby odpowiedzieć na twoje polecenia, użyłem HEAD ^ 1 i HEAD ^ 2 przy nowym uruchomieniu. Polecenia i dane wyjściowe to: $ git log HEAD^1..HEAD --ancestry-path --merges --oneline --color | tail -n 1który daje 376142d merge branchesi $ git log HEAD^2..HEAD --ancestry-path --merges --oneline --color | tail -n 1który daje 376142d merge branches - który pokazuje podsumowanie zatwierdzenia scalania, które (jak twierdziłem) może zostać nadpisane podczas tworzenia scalenia, prawdopodobnie zaciemniając historię rozgałęzienia scalenia.
qneill
0
TL; DR:
Użyj poniższej instrukcji, jeśli zależy Ci na statusach wyjścia z powłoki:
branch-current - nazwa bieżącego oddziału
branch-names - czyste nazwy gałęzi (jedna na linię)
branch-name - Upewnij się, że zwrócona jest tylko jedna gałąź branch-names
Zarówno branch-namei branch-nameszaakceptować commit jako argumentu, i domyślnie HEADjeśli jej nie podano.
Tak naprawdę nie chcę tego głosować, ponieważ ściśle mówiąc to prawda, że git nie przechowuje na stałe tych informacji, ale bardzo często można się o tym dowiedzieć. Zobacz moją odpowiedź.
Odpowiedzi:
Chociaż Dav ma rację, że informacje nie są bezpośrednio przechowywane, to nie znaczy, że nigdy nie dowiesz się. Oto kilka rzeczy, które możesz zrobić.
Znajdź gałęzie, na których zatwierdzenie jest włączone
To powie ci wszystkie gałęzie, które mają dane zatwierdzenie w swojej historii. Oczywiście jest to mniej przydatne, jeśli zatwierdzenie zostało już połączone.
Szukaj w reflogs
Jeśli pracujesz w repozytorium, w którym dokonano zatwierdzenia, możesz przeszukać dzienniki referencyjne w poszukiwaniu tego zatwierdzenia. Reflogi starsze niż 90 dni są przycinane przez git-gc, więc jeśli zatwierdzenie jest za stare, nie znajdziesz go. To powiedziawszy, możesz to zrobić:
znaleźć zatwierdzić a871742. Zauważ, że MUSISZ użyć skrótu 7 pierwszych cyfr zatwierdzenia. Wynik powinien być mniej więcej taki:
wskazując, że zatwierdzenie zostało dokonane w gałęzi „zakończenie”. Domyślne wyjście pokazuje skrócone skróty zatwierdzania, więc nie szukaj pełnego skrótu, bo nic nie znajdziesz.
git reflog show
jest właściwie tylko aliasemgit log -g --abbrev-commit --pretty=oneline
, więc jeśli chcesz majstrować przy formacie wyjściowym, aby udostępnić różne rzeczy do grep, to jest twój punkt wyjścia!Jeśli nie pracujesz w repozytorium, w którym dokonano zatwierdzenia, najlepsze, co możesz zrobić w tym przypadku, to przejrzeć dzienniki logowania i dowiedzieć się, kiedy zatwierdzenie zostało po raz pierwszy wprowadzone do repozytorium; przy odrobinie szczęścia trafiłeś do gałęzi, do której był zaangażowany. Jest to nieco bardziej skomplikowane, ponieważ nie można jednocześnie przejść do drzewa zatwierdzeń i dzienników zmian. Chcesz przeanalizować dane wyjściowe dziennika ponownego sprawdzenia, sprawdzając każdy skrót, aby sprawdzić, czy zawiera on pożądany zatwierdzenie, czy nie.
Znajdź kolejne zatwierdzenie scalania
Jest to zależne od przepływu pracy, ale przy dobrych przepływach pracy zatwierdzenia są dokonywane w gałęziach programistycznych, które są następnie scalane. Możesz to zrobić:
aby zobaczyć zatwierdzenia scalania, które mają dane zatwierdzenie jako przodka. (Jeśli zatwierdzenie zostało scalone tylko raz, pierwszym powinno być scalenie, którego szukasz; w przeciwnym razie będziesz musiał zbadać kilka). Komunikat zatwierdzenia scalenia powinien zawierać nazwę gałęzi, która została scalona.
Jeśli chcesz na tym polegać, możesz użyć
--no-ff
opcji,git merge
aby wymusić utworzenie zatwierdzenia scalania nawet w przypadku szybkiego przewijania. (Nie bądź jednak zbyt chętny. To może stać się zaciemniające, jeśli będzie nadużywane) . Odpowiedź VonC na powiązane pytanie pomaga w opracowaniu tego tematu.źródło
git describe
wystarczające, ponieważ (opatrzone komentarzem) tagi mogą być postrzegane jako bardziej znaczące niż gałęzie.--no-ff
opcji, aby upewnić się, że zawsze istnieje zatwierdzenie scalania, dzięki czemu zawsze możesz śledzić ścieżkę danego zatwierdzenia, gdy jest on scalany w kierunku master.-a
flagę do pierwszego polecenia, np.git branch -a --contains <commit>
-r
.merge --no-ff
aby niezawodnie zarejestrować nazwę oddziału podczas scalania. Ale inaczej pomyśl o nazwach oddziałów jako tymczasowych krótkich etykietach i zatwierdzaj opisy jako stałe. „Jaką krótką nazwą odnosiliśmy się do tego podczas programowania?” tak naprawdę nie powinno być tak ważnego pytania jak „co robi to zatwierdzenie?”To proste polecenie działa jak urok:
git name-rev <SHA>
Na przykład (gdzie gałąź testowa to nazwa gałęzi):
Nawet to działa w przypadku złożonych scenariuszy, takich jak:
Tu
git name-rev commit<SHA2>
zwraca branchB .źródło
git name-rev --name-only <SHA>
się, że jestem bardziej przydatny do uzyskania tylko nazwy oddziału. Moje pytanie ... Czy może zwrócić więcej niż jeden oddział w jakichkolwiek okolicznościach?Aktualizacja z grudnia 2013 r .:
sschuberth komentarze
Opiera się na „ Znajdź zatwierdzenie scalania, które zawiera określone zatwierdzenie ”.
Oryginalna odpowiedź wrzesień 2010:
Sebastien Douche dopiero co wyszedł (16 minut przed odpowiedzią SO):
To jest skrypt Perla od Setha Robertsona, który wydaje się bardzo interesujący:
źródło
git-what-branch
wydaje się, że nie jest już utrzymywany. git-when-scaled to alternatywa napisana w Pythonie, która działa dla mnie bardzo dobrze.Na przykład, aby znaleźć to
c0118fa
zatwierdzenie pochodzi zredesign_interactions
:Powinieneś uruchomić:
I przewiń w dół, aby znaleźć ostatnie zatwierdzenie scalania . Który jest:
Aktualizacja
Lub tylko jedno polecenie:
źródło
git merge -m"Any String Here"
zasłoni informacje o źródłowej i docelowej gałęzi.Merge: f6b70fa d58bdcb
. Możesz nazwać swoje zatwierdzenie scalania tak jak ty. Nie będę miał znaczeniagit branch --contains <ref>
to najbardziej oczywiste polecenie „porcelany”, aby to zrobić. Jeśli chcesz zrobić coś podobnego tylko z poleceniami „hydraulika”:(crosspost z tej odpowiedzi SO )
źródło
khichar.anil opisał większość tego w swojej odpowiedzi.
Właśnie dodam flagę, która usunie tagi z listy nazw wersji. To daje nam:
źródło
Opcja biedny człowiek jest użycie narzędzia
tig
1 naHEAD
, szukać zatwierdzenia, a następnie wizualnie śledzić linię od tego zobowiązać z powrotem aż do scalającej widać. Domyślny komunikat o scaleniu powinien określać, gdzie gałąź zostanie scalona :)źródło
W ramach eksperymentu wykonałem przechwycenie po zatwierdzeniu, które przechowuje informacje o aktualnie wyewidencjonowanej gałęzi w metadanych zatwierdzenia. Zmodyfikowałem też nieco gitk, aby pokazać te informacje.
Możesz to sprawdzić tutaj: https://github.com/pajp/branch-info-commits
źródło
Mam do czynienia z tym samym problemem ( potok Jenkins multibranch) - posiadanie tylko informacji o zatwierdzeniach i próba znalezienia nazwy oddziału, z którego pochodziło to zatwierdzenie. Musi działać dla zdalnych oddziałów, lokalne kopie nie są dostępne.
Z tym pracuję:
Opcjonalnie możesz usunąć dane wyjściowe:
źródło
Myślę, że ktoś powinien zmierzyć się z tym samym problemem, który nie może znaleźć gałęzi, chociaż tak naprawdę istnieje w jednej gałęzi.
Lepiej wyciągnij wszystko najpierw:
Następnie wykonaj wyszukiwanie oddziału:
lub:
źródło
Jeśli OP próbuje ustalić historię , przez którą przeszedł oddział podczas tworzenia konkretnego zatwierdzenia („dowiedz się, z jakiej gałęzi pochodzi zatwierdzenie, biorąc pod uwagę jego wartość skrótu SHA-1”), to bez ponownego logowania nie ma żadnych rekordy w bazie danych obiektów Git, które pokazują, która nazwana gałąź była powiązana z jaką historią zatwierdzania.
(Opublikowałem to jako odpowiedź w odpowiedzi na komentarz).
Mam nadzieję, że ten skrypt ilustruje mój punkt widzenia:
Dane wyjściowe pokazują brak jakiegokolwiek sposobu, aby dowiedzieć się, czy zatwierdzenie z 'Add f1' pochodziło z gałęzi b1 czy b2 ze zdalnego klonu / tmp / r2.
(Ostatnie wiersze wyniku tutaj)
źródło
git log 80c10e5..HEAD --ancestry-path --merges --oneline --color | tail -n 1
igit log 086c9ce..HEAD --ancestry-path --merges --oneline --color | tail -n 1
polecenia dla obu przypadków?$ git log HEAD^1..HEAD --ancestry-path --merges --oneline --color | tail -n 1
który daje376142d merge branches
i$ git log HEAD^2..HEAD --ancestry-path --merges --oneline --color | tail -n 1
który daje376142d merge branches
- który pokazuje podsumowanie zatwierdzenia scalania, które (jak twierdziłem) może zostać nadpisane podczas tworzenia scalenia, prawdopodobnie zaciemniając historię rozgałęzienia scalenia.TL; DR:
Użyj poniższej instrukcji, jeśli zależy Ci na statusach wyjścia z powłoki:
branch-current
- nazwa bieżącego oddziałubranch-names
- czyste nazwy gałęzi (jedna na linię)branch-name
- Upewnij się, że zwrócona jest tylko jedna gałąźbranch-names
Zarówno
branch-name
ibranch-names
zaakceptować commit jako argumentu, i domyślnieHEAD
jeśli jej nie podano.Aliasy przydatne w skryptach
Zatwierdź dostępny tylko z jednego oddziału
0
.Zobowiązanie osiągalne z wielu oddziałów
1
.Ze względu na status wyjścia można je bezpiecznie zbudować. Na przykład, aby użyć pilota do pobierania:
źródło
Aby znaleźć oddział lokalny:
Aby znaleźć zdalną gałąź:
źródło
Oprócz przeszukiwania całego drzewa, dopóki nie znajdziesz pasującego skrótu, nie.
źródło