2013-03-30 10 views
14

Rozwinąłem repo z Github. On robi git remote -v wyświetla:Git nie pokazuje wszystkich oddziałów na lokalnym

origin https://github.com/myusername/moodle.git (fetch) 
origin https://github.com/myusername/moodle.git (push) 
upstream https://github.com/moodle/moodle.git (fetch) 
upstream https://github.com/moodle/moodle.git (push) 

moodle.git ma około 10 oddziałów, ale repo pokazuje tylko 2 z nich. On robi git branch -a (pokaż wszystkie branże) uzyskać:

MOODLE_24_STABLE// just these two on local..how? 
* master// 
    origin/MOODLE_13_STABLE 
    origin/MOODLE_14_STABLE 
    origin/MOODLE_15_STABLE 
    origin/MOODLE_16_STABLE 
    origin/MOODLE_17_STABLE 
    origin/MOODLE_18_STABLE 
    origin/MOODLE_19_STABLE 
    origin/MOODLE_20_STABLE 
    origin/MOODLE_21_STABLE 
    origin/MOODLE_22_STABLE 
    origin/MOODLE_23_STABLE 
    origin/MOODLE_24_STABLE 
    origin/master 
    upstream/MOODLE_13_STABLE 
    upstream/MOODLE_14_STABLE 
    upstream/MOODLE_15_STABLE 
    upstream/MOODLE_16_STABLE 
    upstream/MOODLE_17_STABLE 
    upstream/MOODLE_18_STABLE 
    upstream/MOODLE_19_STABLE 
    upstream/MOODLE_20_STABLE 
    upstream/MOODLE_21_STABLE 
    upstream/MOODLE_22_STABLE 
    upstream/MOODLE_23_STABLE 
    upstream/MOODLE_24_STABLE 
    upstream/master 

Jak mogę rozwiązać mój problem bez utraty danych lub jakichkolwiek nieprawidłowości?

+3

Dlaczego można się spodziewać bardziej lokalne oddziały? Po sklonowaniu repozytorium istnieje tylko jeden lokalny oddział główny. Inne gałęzie tworzone są na żądanie. – knittl

+0

@knittl: Okej. Nie wiedziałem o tym. Czy mógłbyś polecić mi, jak to zrobić? Stworzyłem gałąź, mówiąc: 'git checkout -b STABLE_23_STABLE', ale pliki nie są plikami z tej gałęzi. – xan

+1

'git checkout -b MOODLE_23_STABLE' tworzy nową gałąź poza bieżącym zatwierdzeniem, więc nadal będziesz widzieć te same zatwierdzenia.Albo 'git checkout -b MOODLE_23_STABLE upstream/MOODLE_23_STABLE' lub' git checkout MOODLE_23_STABLE' (skrócona/składnia DWIM) – knittl

Odpowiedz

16

Klonowanie repo nie powiela wszystkich zdalnych oddziałów w lokalnym repo: dla dużego zdalnego repo z wieloma gałęziami, które zanieczyszczają lokalny obszar nazw z tonami oddziałów.

Mam one-liner command, aby utworzyć lokalne oddziały śledzące wszystkie zdalne gałęzie zdalnego repo, ale zazwyczaj nie jest to konieczne.
Utworzysz lokalny oddział śledzący zdalny tylko wtedy, gdy jest potrzebny.

git checkout -b aBranch --track origin/aBranch 

# or, shorter: 
$ git checkout --track origin/aBranch 
Branch aBranch set up to track remote branch refs/remotes/origin/aBranch. 
Switched to a new branch "aBranch" 

# even shorter at the end of this answer. 

Dodawanie --track pozwala na utworzenie konfiguracji zaznaczyć oddział początkowy punkt jako „upstream” z nowego oddziału.
Ta konfiguracja powie gitowi, aby pokazać relację między dwoma oddziałami w git status i git branch -v.
Co więcej, kieruje git pull bez argumentów, aby wyciągnąć z góry, gdy nowy oddział jest wyrejestrowany.


kostix wspomina, że ​​--track zakłada się, kiedy rozwidlone oddział off zdalnej gałęzi (chyba branch.autosetupmerge jest ustawiony na false)

To może być wystarczająco

git checkout aBranch 

Dokładne wyjaśnienie od git checkout man page jest :

Jeśli <branch> nie zostanie znaleziony, ale nie robi istnieć oddział śledzenia w dokładnie jeden pilot (nazywają to <remote>) o nazwie pasującej traktować jako odpowiednik:

$ git checkout -b <branch> --track <remote>/<branch 
+0

'--track' jest implikowane podczas rozwidlania gałęzi z oddziału zdalnego (chyba że' branch.autosetupmerge' nie jest ustawione na 'false'). Poleciłbym również @xan, poświęcić trochę czasu i przeczytać niektóre [materiały wstępne na odległych oddziałach] (http://git-scm.com/book/en/Git-Branching-Remote-Branches), aby nie zgubić się później. – kostix

+0

@kostix dobry punkt. Dodałem tę precyzję do odpowiedzi, aby uzyskać lepszą widoczność. – VonC

+1

'git checkout --track origin/aBranch' to rozwiązało problem dla mnie, dzięki –

2

kilka razy, jeśli havn't pociągnął najnowszy kod, nie będziesz mógł wypróbować nowo utworzonej gałęzi. Ponieważ twoje zmiany nie są zsynchronizowane.

Więc najpierw -pull najnowszej -checkout z nowo utworzonym oddziale

Powiązane problemy