Jak pobrać oddział za pomocą git?

214

Mam projekt hostowany na GitHub. Utworzyłem oddział na jednym komputerze, a następnie przekazałem moje zmiany do GitHub za pomocą:

git push origin branch-name

Teraz jestem na innym komputerze i chcę pobrać tę gałąź. Więc próbowałem:

git pull origin branch-name

... ale to wszystko zastąpiło moją gałąź główną zmianami w mojej nowej gałęzi.

Co muszę zrobić, aby poprawnie wyciągnąć moją zdalną gałąź, bez nadpisywania istniejących gałęzi?

Andrzej
źródło

Odpowiedzi:

375

Dzięki pokrewnemu pytaniu dowiedziałem się, że muszę „sprawdzić” oddział zdalny jako nowy oddział lokalny i podać nazwę nowego oddziału lokalnego.

git checkout -b newlocalbranchname origin/branch-name

Lub możesz zrobić:

git checkout -t origin/branch-name

Ten ostatni utworzy gałąź, która jest również ustawiona do śledzenia gałęzi zdalnej.


Aktualizacja: Minęło 5 lat, odkąd pierwotnie opublikowałem to pytanie. Wiele się nauczyłem i od tego czasu git się poprawił. Mój zwykły przepływ pracy jest teraz trochę inny.

Jeśli chcę pobrać zdalne gałęzie, po prostu uruchamiam:

git pull

Spowoduje to pobranie wszystkich zdalnych gałęzi i scalenie bieżącej gałęzi. Wyświetli wyjście, które wygląda mniej więcej tak:

From github.com:andrewhavens/example-project
   dbd07ad..4316d29  master     -> origin/master
 * [new branch]      production -> origin/production
 * [new branch]      my-bugfix-branch -> origin/my-bugfix-branch
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 4316d296c55ac2e13992a22161fc327944bcf5b8.

Teraz git wie o moim nowym my-bugfix-branch. Aby przejść do tej gałęzi, mogę po prostu uruchomić:

git checkout my-bugfix-branch

Zwykle musiałbym utworzyć gałąź, zanim będę mógł to sprawdzić, ale w nowszych wersjach git jest wystarczająco mądry, aby wiedzieć, że chcesz pobrać lokalną kopię tej zdalnej gałęzi.

Andrzej
źródło
Używam GIT 1.7.2.5, a komenda że pracował dla mnie było: git branch --track XX origin/XX. Twoje polecenie daje mi błąd.
dimitarvp
8
Jeśli nie masz pobranych wszystkich zdalnych gałęzi, może się to nie powieść. Wykonaj „git remote update”, aby je ściągnąć.
Ben Walding,
1
W rzeczywistości może być jeszcze krótsza „nazwa gałęzi git Checkout”. Jeśli nazwa gałęzi jest taka sama jak gałąź zdalnego śledzenia (tj. Nazwa pochodzenia / nazwa gałęzi), to automatycznie jest to lokalna gałąź śledzenia.
DavidN
64

Dla każdego początkującego Gita, takiego jak ja, oto kilka kroków, które możesz wykonać, aby pobrać zdalne repozytorium, a następnie przejść do gałęzi, którą chcesz wyświetlić. Prawdopodobnie w jakiś sposób nadużywają Gita, ale to zadziałało dla mnie! :-)

Sklonuj repozytorium, dla którego chcesz pobrać kod (w tym przykładzie wybrałem projekt LRResty na Github):

$ git clone https://github.com/lukeredpath/LRResty.git
$ cd LRResty

Sprawdź, jakiej gałęzi używasz w tym momencie (powinna to być gałąź główna):

$ git branch    
* master

Sprawdź gałąź, którą chcesz, w moim przypadku nazywa się to „arcified”:

 $ git checkout -b arcified origin/arcified
 Branch arcified set up to track remote branch arcified from origin.
 Switched to a new branch 'arcified'

Potwierdź, że korzystasz teraz z żądanego oddziału:

$ git branch    
* arcified
  master

Jeśli chcesz później zaktualizować kod, uruchom git pull:

$ git pull
Already up-to-date.
Dan J.
źródło
„Prawdopodobnie w jakiś sposób nadużywają Gita” - nie, właśnie tak jest.
Big McLargeHuge
28

Możesz użyć git remote, takiego jak:

git fetch origin

a następnie skonfiguruj oddział lokalny, aby śledzić oddział zdalny, jak poniżej:

git branch --track [local-branch-name] origin/remote-branch-name

Teraz będziesz mieć zawartość zdalnego oddziału github w local-branch-name.

Możesz przełączyć się na nazwę lokalnego oddziału i rozpocząć pracę:

git checkout [local-branch-name]
ardsrk
źródło
18

możesz użyć :

git clone <url> --branch <branch>

sklonować / pobrać tylko zawartość oddziału.

Było to szczególnie pomocne, ponieważ zawartość mojej gałęzi była całkowicie inna niż gałąź główna (choć zwykle tak nie jest). Dlatego sugestie wymienione przez innych powyżej nie pomogły mi i ostatecznie otrzymałem kopię mistrza nawet po sprawdzeniu gałęzi i ściągnięciu git.

To polecenie dałoby ci bezpośrednio zawartość gałęzi. To zadziałało dla mnie.

Stary Markus
źródło
1
To najlepsza odpowiedź. Prosty i skuteczny.
derek
2
To nie wydaje mi się działać. Mówi, że jest już folder o tej nazwie (który oczywiście istnieje)
Jonathan Tuzman
1
@Jathanathan Nie będzie dołączać nowego oddziału do istniejącego. Można go użyć tylko do klonowania nowej kopii. Nie rozumiem, dlaczego powinien istnieć folder o tej nazwie, jeśli nie sklonowałeś jeszcze repozytorium. Spróbuj klonować w innym miejscu.
Old Markus
Nie aktualizuje istniejącego projektu o nowy oddział
Dazzle
16

Przejdź do folderu na nowym komputerze, który chcesz pobrać z git na git bash.

Użyj poniższego polecenia, aby pobrać kod z dowolnej gałęzi, którą lubisz

git clone 'git ssh url' -b 'Branch Name'

Pobierze odpowiedni kod oddziału.

Srikanta Sahoo
źródło
9

Git clone i cd w nazwie repozytorium:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git
Cloning into 'iOS-AppleWach'...
$ cd iOS-AppleWach

Przejdź do gałęzi (strony GitHub), którą chcę:

$ git checkout -b gh-pages origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

I pociągnij gałąź:

$ git pull
Already up-to-date.

ls:

$ ls
index.html      params.json     stylesheets
Pablo Ezequiel
źródło
0

git checkout -b gałąź / nazwa

git pull odgałęzienie / nazwa

Oślepiać
źródło
0

Możesz spróbować

git fetch <remoteName> <branchName>

Na przykład:

git fetch origin MyRemoteBranch
Bimzee
źródło
-8

Utwórz nowy katalog i zamiast tego wykonaj klon.

git clone (adres pochodzenia) (nazwa oddziału)

seisatsu
źródło
3
W Git nie można klonować tylko gałęzi . Można wykonać tylko pełny klon repozytorium.
Alan Haggai Alavi