Zobacz także:
Jak mogę sprawdzić, które gałęzie Git śledzą, która gałąź zdalna / nadrzędna?
Jak mogę dowiedzieć się, który oddział zdalny śledzi oddział lokalny?
Czy muszę analizować git config
dane wyjściowe, czy też istnieje polecenie, które by to dla mnie zrobiło?
git
branch
git-remote
Tylko czytać
źródło
źródło
git remote show origin
. Główną odpowiedzią na drugie pytanie jest skrypt bashowy zawarty wokół prostej odpowiedzi tutaj, która może być przydatna dla niektórych. Mam nadzieję, że to pytanie nie zostanie całkowicie zamknięte.Odpowiedzi:
Oto polecenie, które udostępnia wszystkie gałęzie śledzące (skonfigurowane do „ściągania”), patrz:
Musisz przedzierać się przez SHA i wszelkie długo owijające się komunikaty zatwierdzenia, ale szybko się pisze i wyrównuję gałęzie śledzące pionowo w trzeciej kolumnie.
Jeśli potrzebujesz informacji na temat konfiguracji „pull” i „push” na gałąź, zobacz drugą odpowiedź na
git remote show origin
.Aktualizacja
Począwszy od wersji git 1.8.5, możesz wyświetlić gałąź upstream za pomocą
git status
igit status -sb
źródło
git branch -av
lubgit remote show origin
, co daje dużo danych, nie tylko śledzone zdalnegit status
igit status -sb
- więc po aktualizacji do 1.8.5.x to pytanie (i odpowiedź) nie ma znaczenia.Dwie możliwości:
lub
źródło
%(refname:short)
to nazwa bieżącego ref w obrębie--format
.git help revisions
(jedna z mało znanych, ale najbardziej przydatnych części dokumentów) i wyszukajupstream
.git diff `git rev-parse --abbrev-ref --symbolic-full-name @{upstream}`
echo 'git for-each-ref --format=\'%(refname:short) -> %(upstream:short)\' refs/heads/$1' > ~/bin/git-show-upstream; chmod +x ~/bin/git-show-upstream
git for-each-ref --format='%(upstream:short)' $(git rev-parse --symbolic-full-name SOMEBRANCH)
zastąpienie SOMEBRANCH nazwą oddziału lub „HEAD” dla aktualnego oddziałuMyślę, że
git branch -av
mówi tylko, jakie masz gałęzie i które zatwierdzają, pozostawiając cię do wnioskowania, które odległe gałęzie śledzą lokalne oddziały.git remote show origin
wyraźnie informuje, które gałęzie śledzą, które gałęzie zdalne. Oto przykładowe dane wyjściowe z repozytorium z pojedynczym zatwierdzeniem i zdalną gałęzią o nazwieabranch
:przeciw
źródło
git remote show origin
pokazuje lokalne oddziały i ich śledzenie zarówno dla push i pull.origin
, podczas gdy w rzeczywistości może to być wszystko (np. wiele pilotów, z różnymi gałęziami śledzącymi gałęzie z różnych pilotów).Aktualizacja: Cóż, minęło kilka lat, odkąd to opublikowałem! Dla mojego konkretnego celu porównania HEAD z upstream, teraz używam
@{u}
, który jest skrótem odnoszącym się do HEAD w gałęzi śledzenia upstream. (Zobacz https://git-scm.com/docs/gitrevisions#gitrevisions-emltbranchnamegtupstreamemegemmasterupstreamememuem ).Oryginalna odpowiedź: napotkałem również ten problem. Często używam wielu pilotów w jednym repozytorium i łatwo jest zapomnieć, z którego z nich śledzi twoja obecna gałąź. A czasem dobrze jest o tym wiedzieć, na przykład, gdy chcesz spojrzeć na swoje lokalne zobowiązania za pośrednictwem
git log remotename/branchname..HEAD
.Wszystkie te rzeczy są przechowywane w zmiennych konfiguracyjnych git, ale nie musisz analizować danych wyjściowych git config. Jeśli wywołasz git config, a po nim nazwę zmiennej, po prostu wydrukuje ona wartość tej zmiennej, bez konieczności analizowania. Mając to na uwadze, oto kilka poleceń, aby uzyskać informacje o bieżącej konfiguracji śledzenia Twojego oddziału:
W moim przypadku, ponieważ jestem zainteresowany tylko znalezieniem nazwy mojego obecnego pilota, robię to:
źródło
git name-rev --name-only HEAD
to nie powie ci, na której gałęzi jesteś. Do tego właśnie użyłemgit branch | grep '^\*' | cut -d' ' -f2
@{u}
aliasie / skrócie i właśnie tego szukałem! Nie ma powodu, aby porównywać z gałęzią master, jeśli chcesz tylko ustalić, czy musisz wyciągnąć, czy nie.@{u}
jest bombą. I jest już od wersji 1.7.0, co oznacza, że jeśli nie jest dostępny w gitarze, którego ktoś używa w 2018 r., Prawdopodobnie należy go aktualizacja.Lokalne oddziały i ich piloty.
Wszystkie oddziały i piloty śledzące.
Zobacz, gdzie lokalne oddziały są jawnie skonfigurowane dla push i pull.
źródło
Spowoduje to wyświetlenie gałęzi, w której się znajdujesz:
Spowoduje to wyświetlenie tylko bieżącego oddziału, w którym się znajdujesz:
na przykład:
Możesz dowiedzieć się, jaki jest adres URL pilota używanego przez bieżący oddział :
na przykład:
źródło
Możesz użyć
git checkout
, tzn. „Sprawdź bieżący oddział”. Jest to brak operacji z efektami ubocznymi, aby wyświetlić informacje o śledzeniu, jeśli istnieją, dla bieżącej gałęzi.źródło
Nie wiem, czy liczy się to jako analizowanie danych wyjściowych git config, ale to określi adres URL zdalnego, który śledzi master:
źródło
git config branch.$(git symbolic-ref -q HEAD).remote
jeśli chcesz, aby nazwa pilota była śledzona w bieżącym oddziale -git config remote.$(git config branch.$(git symbolic-ref -q HEAD).remote).url
dla adresu URL.--short
opcję, aby to działało. Aby uzyskać zdalną nazwę bieżącego oddziału:git config branch.$(git symbolic-ref -q --short HEAD).remote
i uzyskać adres URL zdalnego oddziału:git config remote.$(git config branch.$(git symbolic-ref -q --short HEAD).remote).url
Jeszcze inny sposób
To ci da
źródło
Innym prostym sposobem jest użycie
cat .git/config
w repozytorium gitSpowoduje to wyświetlenie szczegółów dla lokalnych oddziałów
źródło
type .git/config
zamiast,cat .git/config
oczywiście, w zwykłej linii poleceń.Inna metoda (dzięki osse), jeśli chcesz tylko wiedzieć, czy istnieje:
źródło
git branch -vv | grep 'BRANCH_NAME'
git branch -vv
: Ta część pokaże wszystkie lokalne oddziały wraz z ich odgałęzieniem.grep 'BRANCH_NAME'
: Filtruje bieżącą gałąź z listy gałęzi.źródło
wyświetli wszystkie gałęzie, w tym zdalne.
źródło
Wyświetla listę oddziałów lokalnych i zdalnych:
Wynik:
źródło
git-status porcelana (do odczytu maszynowego) v2 wygląda następująco:
I aby uzyskać oddział tylko powyżej:
Jeśli gałąź nie ma żadnych danych wyjściowych, powyższe polecenie wygeneruje puste dane wyjściowe (lub zakończy się niepowodzeniem
set -o pipefail
).źródło
Jeśli chcesz znaleźć upstream dla dowolnej gałęzi (w przeciwieństwie do tej, w której się znajdujesz), oto niewielka modyfikacja odpowiedzi @ cdunn2001:
git rev-parse --abbrev-ref --symbolic-full-name YOUR_LOCAL_BRANCH_NAME@{upstream}
To da ci nazwę oddziału zdalnego dla oddziału lokalnego o nazwie
YOUR_LOCAL_BRANCH_NAME
.źródło
Możesz spróbować:
branch_name
musi zostać zastąpiony przez twój oddziałźródło
git remote show origin
- jeśli to się nazywamerges
lubconfigure
?Używam tego aliasu
następnie
pamiętaj, że skrypt może być również użyty do konfiguracji śledzenia.
Więcej świetnych aliasów na https://github.com/orefalo/bash-profiles
źródło
Używam EasyGit (aka „np.”) Jako superlekkiego opakowania na Git (lub obok niego). EasyGit ma podkomendę „info”, która zapewnia wszelkiego rodzaju bardzo przydatne informacje, w tym gałąź zdalnego śledzenia bieżących gałęzi. Oto przykład (gdzie obecna nazwa oddziału to „foo”):
źródło
Poprawiając tę odpowiedź , wymyśliłem te
.gitconfig
aliasy:źródło
Jeśli używasz Gradle,
źródło
Następujące polecenie będzie dotyczyć bieżącego początkowego rozwidlenia
Aby dodać ścieżkę zdalną,
źródło