2011-06-23 12 views
30

Mam scenariusz, w którym istnieje kilka oddziałów zdalnego śledzenia w moim lokalnym repozytorium, które muszę zsynchronizować. Nasz model pracy jest:Jak mogę określić, na której zdalnej gałęzi "macierzystej" opiera się mój oddział?

  • uczynić oddział lokalnie, w oparciu off pożądanego zdalnego śledzenia oddział
  • aby nasze zmiany
  • build/test/naprawić
  • popełnić
  • odepchnąć na pilocie serwer

Zauważyłem, że "status git" nie pokazuje mi, na której gałęzi opiera się mój lokalny oddział, chyba że coś się zmieniło; tj. niezatwierdzone zmiany lokalne lub niedawne pobranie stawia lokalny oddział za czasami. Czy jest jakiś sposób na poznanie, na jakiej gałęzi opiera się mój lokalny oddział, bez konieczności zmieniania rzeczy? Coś w stylu "git status -showparentbranch" lub inne polecenie, które to pokaże. Czasami napotykam na tę potrzebę, ale nie wiem jeszcze, jak ją zaspokoić.

Odpowiedz

14

Git nie śledzi, które gałęzie zostało zatwierdzone. Nie ma sposobu, by powiedzieć. Jeśli na repozytorium nastąpiły zatwierdzenia, możesz przejrzeć reflog, ale to wszystko. Spójrz na objaśnienie DAG w the Pro Git book - przeczytaj również tam, gdzie jest reflog.

Można również wyobrazić historię lepiej gitk --all lub git log --graph --decorate

nadzieję, że to pomaga.

+3

'git show-branch' opowiada o dywergencji, too. –

+1

tak. Dobry połów. Możesz także dodać '--oneline' do komendy log, aby zmieścić więcej zatwierdzeń na ekranie. –

+1

Wiele przeprosin. Zapomniałem skomentować, czy to odpowiedział na moje pytanie. Nie jestem pewien, czy tak jest. Z twojej odpowiedzi zastanawiam się, czy właściwie zadałem pytanie. Nie próbowałem dowiedzieć się, jakie gałęzie zostały dotknięte przez moje zatwierdzenie. Raczej zastanawiałem się, czy istnieje sposób na poznanie, na czym polega gałąź zdalna, na której opierał się mój lokalny oddział. –

9

git branch -vv będzie:

  • lista wszystkie Lokalne oddziały
  • wyświetlacz nazwa zdalnej gałęzi obok każdego lokalnego oddziału
  • podświetlić aktywny oddział lokalny

. ... z tego będzie można określić zdalną gałąź bieżącego aktywnego oddziału, i wiele więcej.

Jeśli masz dużo oddziałów lokalnych, lista może być bardzo długa. Użyj git branch -vv | grep SOMEWORD, aby ograniczyć wyjście tylko do gałęzi zawierających SOMEWORD. Jeśli możesz wymyślić słowo unikalne dla swojej gałęzi, otrzymasz najlepszy filtr (tylko jeden wynik).

Otrzymasz również dodatkowe dane na wyjściu, a mianowicie numer (SHA1) i komunikat ostatniego zatwierdzenia. Filtr grep zastosuje się do tych. Nie mogłem znaleźć sposobu, aby to wykluczyć.

Od Git branch documentation:

-v

-vv

--verbose

Gdy w trybie listy, show-SHA1 i popełnić przedmiot wiersz dla każdej głowicy, wzdłuż w odniesieniu do gałęzi upstream (jeśli istnieje). Jeśli zostanie podany dwukrotnie, wypisz również nazwę odgórnej gałęzi (zobacz także git remote show).

(Na podstawie Twojego komentarza, tak, wydaje się, że „prawidłowe” pytanie byłoby zapytać o „zdalnym” oddział raczej niż „macierzystej” gałęzi. Ale to, co szukałem też! :))

35

spróbuj tego:

git log --graph --decorate 
+5

Powinieneś także dodać flagę '--oneline', aby jak najlepiej wykorzystać swoją nieruchomość na ekranie. – cmaster

2

można też spróbuj tego:

git rev-parse --abbrev-ref --symbolic-full-name @{u} 

i stosując ten alias w pliku .gitconfig:

[alias] 
    showparentbranch = rev-parse --abbrev-ref --symbolic-full-name @{u} 

Mogłeś po prostu zadzwonić:

git showparentbranch 

Testowane na wersji git 2.10.2.windows.1

Powiązane problemy