Wiem, że potrafię git branch --all
i pokazuje mi to zarówno oddziały lokalne, jak i zdalne, ale nie jest to przydatne do pokazywania mi relacji między nimi.
Jak wyświetlić listę oddziałów w sposób pokazujący, który oddział lokalny śledzi, który jest zdalny?
git remote show origin
Zamień „origin” na dowolną nazwę pilota.
źródło
git remote show
polecenie faktycznie łączy się ze zdalnym repozytorium ... i dlatego zawiedzie, jeśli zdarzy się, że jesteś offline lub nie możesz połączyć się z repozytorium z jakiegokolwiek powodu ...git remote show -n origin
aby uzyskać pewne informacje, nawet w trybie offline. Z dokumentacji zdalnej git : „Przy opcji -n zdalne głowy nie są najpierw pytane o git ls-remote <nazwa>; zamiast tego używane są informacje buforowane.”git remote show | xargs git remote show -n
aby wyświetlić połączone informacje o śledzeniu dla wszystkich pilotów.Jeśli spojrzysz na stronę podręcznika
git-rev-parse
, zobaczysz następującą składnię:Aby znaleźć górę oddziału
master
, wykonaj następujące czynności:Aby wydrukować informacje dla każdego oddziału, możesz zrobić coś takiego:
Jest to czystsze niż ręczne analizowanie referencji i konfiguracji.
źródło
done < <(git for-each-ref --format='%(refname:short)' refs/heads/**)
Zwróć uwagę na dwie gwiazdki na końcu wzorca globu.git rev-parse --abbrev-ref HEAD@{upstream}
wydaje się działać dobrze dla obecnego oddziału. To także tworzy miły alias git.while
Składnia pętli wygląda nieco dziwne dla mnie. Możesz po prostu użyć,git for-each-ref ... | while read branch; do ...
który nie wymaga FIFO i działa w tej samej kolejności, co napisane polecenia.git for-each-ref --format='%(refname:short) tracks %(upstream:short)' refs/heads/*
Alternatywą dla odpowiedzi kubi jest obejrzenie
.git/config
pliku, który pokazuje konfigurację lokalnego repozytorium:cat .git/config
źródło
git config --get-regex branch
pokaże wiersz dla każdego oddziału lokalnego. Oddział śledzenia będzie wyglądał następująco:
Bez śledzenia będzie wyglądać następująco:
źródło
git branch -vv
. 🙏git config --global alias.track 'for-each-ref --format='\''%(refname:short) <- %(upstream:short)'\'' refs/heads'
Dla aktualnej gałęzi, oto dwie dobre opcje:
lub
Ta odpowiedź znajduje się również tutaj na nieco inne pytanie, które (błędnie) zostało oznaczone jako duplikat.
źródło
git for-each-ref --shell --format='%(refname:short) %(upstream:short)' refs/heads
.W przypadku bieżącego oddziału można również powiedzieć
git checkout
(bez żadnego oddziału). Jest to brak operacji z efektami ubocznymi, aby wyświetlić informacje o śledzeniu, jeśli istnieją, dla bieżącej gałęzi.źródło
git checkout .
, co nie jest żadną opcją.Używam tego aliasu
następnie
źródło
Na podstawie odpowiedzi Oliviera Refalo
Pokazuje tylko lokalnie ze skonfigurowaną ścieżką.
Napisz go na skrypcie o nazwie git-track na swojej ścieżce, a otrzymasz polecenie git track
Bardziej rozbudowana wersja na https://github.com/albfan/git-showupstream
źródło
git config --get-regexp "branch\.$current_branch\.remote"
poda nazwę śledzonego pilota
git config --get-regexp "branch\.$current_branch\.merge"
poda nazwę oddziału, który jest śledzony.
Musisz zastąpić $ current_branch nazwą swojej aktualnej gałęzi. Możesz uzyskać to dynamicznie za pomocą
git rev-parse --abbrev-ref HEAD
Poniższy mini-skrypt łączy te rzeczy. Umieść go w pliku o nazwie
git-tracking
, spraw , by był wykonywalny i upewnij się, że znajduje się na twojej ścieżce.wtedy możesz powiedzieć
zwróć uwagę, że nazwa oddziału zdalnego może różnić się od nazwy oddziału lokalnego (choć zazwyczaj nie jest). Na przykład:
jak widać w kodzie, kluczem do tego jest wyodrębnienie danych z konfiguracji git. Po prostu używam sed, aby usunąć zbędne dane.
źródło
Oto schludny i prosty. Może sprawdzić
git remote -v
, który pokazuje wszystkie pochodzenie i upstream bieżącego oddziału.źródło