2016-08-30 10 views
13

Biorąc pod uwagę projekt z kilkoma oddziałami lokalnymi, każde śledzenie jakiegoś zdalnego oddziału, jest tam polecenie wyświetlające wszystkie gałęzie, które mają nieprzerwane zatwierdzenia? (Oznacza to, że nawet jeśli żadna z tych gałęzi nie jest wyrejestrowana).W Git, wyświetl nazwy oddziałów z nieprzerwanym zatwierdzeniem

Nie chcę widzieć samych commitów, ani nie chcę widzieć gałęzi, które są aktualne, chcę tylko zobaczyć które gałęzie wyprzedzają swoich pilotów.

Próbowałem git log --branches --not --remotes --simplify-by-decoration --decorate --oneline, ale wydaje się, że nie pokazuje tego, czego potrzebuję. Uruchomienie go na moim obecnym repo daje żadnego wyjścia, ale działa git status na mojego obecnego oddziału pokazuje Your branch is ahead of 'origin/branchname' by 2 commits.

git for-each-ref --format="%(refname:short) %(push:track)" refs/heads i git branch -v oba pokazują branże, które są na bieżąco, jak również te, które wymagają pchania. Jednak oba mają moją obecną gałąź jako .

Inne polecenia, które znalazłem np. git log @{u}.., git cherry -v wymieniają same zatwierdzenia, a nie gałęzie.

Side pytanie: dlaczego wyjście z git log --branches --not --remotes --simplify-by-decoration --decorate --oneline nie zawierają gałęzie git branch -v pokazuje jak do przodu? Czy poprzednie polecenie nie sprawdza, który z numerów nie odpowiada znanemu zdalnemu? więc czy gałąź wymieniona jako [ahead 2] nie spełnia tych kryteriów?

+1

Możliwy duplikat [Pokaż informacje o git przed i za wszystkimi oddziałami, w tym pilotami] (http://stackoverflow.com/questions/7773939/show-git-ahead-and-behind-info-for-all-branches- include-remote) –

+0

@TimBiegeleisen Interesujące, ale akceptowaną odpowiedzią jest skrypt Bash (używam Linux/OSX/Windows), a druga odpowiedź daje prawie pusty wynik. – detly

+1

@TimBiegeleisen Okay, Zidentyfikowaliśmy problem i jest to rzeczywiście duplikat. – detly

Odpowiedz

3

Opcja log--no-walk wydaje się zrobić lepiej . zadaniem co muszę niż --simplify-by-decoration Moje pełne polecenie to:

git log --branches --not --remotes --no-walk --decorate --oneline

... co mam aliasem unpushed

.
+0

Interesujący alias. Dobra alternatywa dla mojej odpowiedzi. +1 – VonC

+0

W przeciwieństwie do odpowiedzi @ VonC, to pokazuje gałęzie bez odpowiednich pilotów, więc YMMV zależy od twojego przepływu pracy. Dla mnie jest to preferowane ':)' – detly

7
git for-each-ref --format="%(refname:short) %(push:track)" refs/heads 

że pozostają najbardziej precyzyjnej odpowiedzi, które można łatwo analizować/grep, aby uzyskać pożądany wynik (jak usuwanie up-to-date oddziały)

można to zrobić w skrypcie bash, który będzie zadzwoń pod numer git-xxx (bez rozszerzenia), gdzieś w swoim $PATH lub %PATH%.
Ten skrypt można następnie wywołać z git xxx i użyjemy git bash.
To jest przenośny i będzie działać na różnych platformach (znaczeniowe nawet w systemie Windows, gdzie <Git For Windows>/usr/bin obejmuje 200 + polecenia Linux (grep, sed, awk, xargs, ...)

+0

Należy zauważyć, że nie podświetla to gałęzi, które nie śledzą pilota (i które w związku z tym mają wszystkie niezałagodzone zatwierdzenia). – Tamlyn

+0

@Tamlyn Zgadzam się. W kontekście tego pytania skupiłem się jednak tylko na lokalnych oddziałach, które wyznaczyły zdalny oddział śledzenia. – VonC

Powiązane problemy