Pytanie Git pobiera zdalny oddział


Mój kolega i ja pracujemy nad tym samym repozytorium, w którym podzieliliśmy go na dwie gałęzie, z których każda jest technicznie dla różnych projektów, ale mają podobieństwa, więc czasami będziemy chcieli przywrócić * głównego z gałęzi.

Mam jednak oddział. Moje pytanie brzmi: w jaki sposób mój kolega może specjalnie wybrać tę gałąź? ZA git clone repo wydaje mi się, że nie tworzy dla niego oddziałów, ale widzę je na żywo bez pchnięcia po moim końcu.

Ponadto, kiedy pierwotnie zrobiłem gałąź, którą zrobiłem -b checkout. Nie jestem pewien, czy to robi dużą różnicę?

iMac:test_solar dave$ git branch -r
origin/HEAD -> origin/master
origin/daves_branch
origin/discover
origin/master

git fetch origin discover
git checkout discover

To są polecenia, które uruchomiłem. Ale zdecydowanie nie działa. Chcę móc sprawdzić tę gałąź, a następnie przekazać i zatwierdzić tylko zmiany gałęzi od różnych współpracowników lub stacji roboczych.


1602
2018-03-02 17:06


pochodzenie


możliwy duplikat git checkout zdalny oddział - Andrew Marshall
Użyłem: git fetch --all, Następnie, aby wyświetlić wszystkie gałęzie: git branch, Potem kasy w oddziale: git checkout nameofnewbranch - Jeff Mattson
sprawdź swoje pytanie ans https://stackoverflow.com/questions/1072261/push-and-pull-branches-in-git/47780374#47780374 - Rizo


Odpowiedzi:


Musisz utworzyć lokalny oddział, który śledzi zdalny oddział. Poniższe polecenie utworzy lokalny oddział o nazwie daves_branch, śledzenie zdalnego oddziału origin / daves_branch. Po wprowadzeniu zmian gałąź zdalna zostanie zaktualizowana.

Dla większości wersji git:

git checkout --track origin/daves_branch

--track jest skrótem dla git checkout -b [branch] [remotename]/[branch] gdzie jest [remotename] pochodzenie w tym przypadku i [gałąź] jest dwa razy taka sama, daves_branch w tym przypadku.

W przypadku gita 1.5.6.5 potrzebowałeś tego:

git checkout --track -b daves_branch origin/daves_branch

W przypadku git 1.7.2.3 i wyższych jest to wystarczające (mogło zacząć się wcześniej, ale jest to najwcześniejsze potwierdzenie, które mogłem szybko znaleźć):

git checkout daves_branch

Zauważ, że w przypadku ostatnich wersji git, to polecenie nie utworzy gałęzi lokalnej i przeniesie cię w stan "odłączonego HEAD". Jeśli chcesz lokalny oddział, użyj --track opcja. Pełne szczegóły tutaj: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches


2225
2018-03-02 17:45



"git fetch", aby upewnić się, że twoje repo zostanie zaktualizowane zdalnymi referencjami, a "git checkout - ścieżka pochodzenia / odkrywania" powinno wystarczyć. Następnie możesz zatwierdzić tę gałąź i "naciśnij git", aby zsynchronizować pilota ze zmianami. - ralphtheninja
Próbowałem tego i otrzymałem "fatal: git checkout: uaktualnianie ścieżek jest niekompatybilne z przełączaniem gałęzi. Czy zamierzałeś zamówić" upstream / develop ", którego nie można rozwiązać jako commit?". czy robię coś źle? - Neil Barnwell
Wygląda na to, że git 1.5.6.5 potrzebuje tego zamiast: git checkout --track -b origin / daves_branch - Charlie
Stworzyło to dla mnie bałagan, utworzyło lokalny oddział o nazwie origin / <branch>, który jest teraz niejednoznaczny dla odległego oddziału / <branch> i nie wiem, jak pozbyć się zwariowanego lokalnego oddziału! - Alan Moore
Musisz jawnie dodać nazwę lokalnego oddziału, w przeciwnym razie git utworzy nowy oddział lokalny z pełną ścieżką do gałęzi, jak @AlanMoore i @ derekmx271 podane powyżej: git checkout -b --track daves_branch origin/daves_branch - Mike Scott


używałem fetch śledzony przez checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... gdzie <rbranch> jest zdalnym oddziałem lub źródło ref i <lbranch> jest jak dotąd nie istnieje oddział lokalny lub docelowy ref chcesz śledzić i które prawdopodobnie chcesz nazwać tak samo jak zdalną gałąź lub źródło ref. Zostało to wyjaśnione w opcje w wyjaśnieniu <refspec>.

Git jest tak inteligentny, że automatycznie wykonuje pierwsze polecenie, jeśli ja patka po pierwszych kilku literach oddziału zdalnego. IE: Nie muszę nawet wymieniać lokalnego oddziału, Git automatycznie kopiuje dla mnie nazwę zdalnego oddziału. Dzięki, Git!

Również jak odpowiedź w tym podobnym poście SO pokazuje, jeśli nie nazwę lokalnego oddziału w fetch, nadal możesz go utworzyć po sprawdzeniu za pomocą -b flaga. TO ZNACZY:  git fetch <remote> <branch> śledzony przez git checkout -b <branch> <remote>/<branch> robi dokładnie to samo, co moja początkowa odpowiedź. I oczywiście, jeśli masz repozytorium tylko jeden zdalny, możesz po prostu zrobić git checkout <branch> po fetch i utworzy dla ciebie lokalny oddział. NA PRZYKŁAD: Właśnie sklonowałeś repozytorium i chcesz sprawdzić dodatkowe gałęzie od pilota.

Uważam, że niektóre z dokumentacji dla fetch mogły być skopiowane dosłownie pull. W szczególności sekcja na temat <refspec> w opcje Jest taki sam. Jednak nie wierzę w to fetch czy kiedykolwiek merge, więc jeśli zostawisz docelową stronę dwukropka pustym fetch  nie powinien robić nic.

UWAGA: To git fetch <remote> <refspec> jest skrótem git fetch <remote> <refspec>: który nie zrobiłby nic, ale git fetch <remote> <tag> jest taki sam jak git fetch <remote> <tag>:<tag> który powinien skopiować pilota <tag> lokalnie.

Sądzę, że jest to przydatne tylko wtedy, gdy chcesz skopiować lokalnie zdalny oddział, ale niekoniecznie go od razu sprawdzić. W przeciwnym razie będę teraz używał zaakceptowana odpowiedź powyżej, który został szczegółowo wyjaśniony w pierwszej części dokumentu opis kasy i później w opcje sekcja pod wyjaśnieniem --track, ponieważ jest to 1-liniowy. Dobrze... rodzaj 1-liniowej, bo tak byś zrobił nadal Muszę uciekać git fetch <remote> pierwszy.

FYI: kolejność <refspecs> (source: destination) wyjaśnia dziwaczną metodę Git-1.7 dla usuwanie odległych oddziałów. IE: Nie wciskaj niczego w cel refspec.


744
2018-04-19 00:45



Zakładasz, że autouzupełnianie Gita jest skonfigurowane. code-worrier.com/blog/autocomplete-git - antonagestam
To działało dla mnie, aby zdalny kod został umieszczony w lokalnym oddziale. Jednak mój lokalny oddział nie mógł śledzić zdalnego oddziału. - Aknosis
To działało dla mnie, przyjęta odpowiedź nie. - Parthian Shot
Z jakiegoś powodu, git fetch remote branch w ogóle dla mnie nie dodałem głowy oddziału, chociaż wszystkie informacje zostały pobrane, więc gdy próbowałem wykonać kroki w zaakceptowanej odpowiedzi, dostałem błąd, że pathspec did not match any file(s) known to git., ale rbranch:lbranch podejście zadziałało. Co ciekawe, pobrano także wszystkie tagi, które zaczynały się od tego samego prefiksu, tak jak jest to wieloznaczne (rbranch*). - haridsv
Nit: git nie wykonuje autouzupełniania, jest to robota powłoki bash. - legalize


Jeśli próbujesz "sprawdzić" nowy zdalny oddział (który istnieje tylko na zdalnym, ale nie lokalnie), oto czego potrzebujesz:

git fetch origin
git checkout --track origin/<remote_branch_name>

Zakłada, że ​​chcesz pobrać z pochodzenie. Jeśli nie, wymień pochodzenie przez Twój zdalny Nazwa.


270
2018-05-17 12:14



"ciągnąć" od początku jest mylącym językiem, lepiej zmienić powyższy komentarz na "pobieranie" z miejsca pochodzenia. Pull to polecenie, które wykonuje pobieranie i scalanie i które z pewnością miesza nowych użytkowników (ja w zestawie) - Davos
Pracował dla mnie! Dodaję to do moich notatek teraz :) Dziękuję! - hmd
Pracowałem dla mnie, nie przyniosłem prawidłowego oddziału zdalnego, więc przyjęta odpowiedź nie dała mi spokoju z mylącą wiadomością. +1 - Nathan Hinchey
Proste i słodkie, jestem pewien, że większość użytkowników po prostu chce wykonać tę operację na pierwszym miejscu. - vikramvi
Tego zawsze szukałem! Dziękuję @ paneer_tikka - Kris Randall


Do kasy myBranch, które istnieje zdalnie, a nie lokalnie - To działało dla mnie:

git fetch --all
git checkout myBranch

Mam tę wiadomość:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'

88
2017-11-12 03:36



Innymi słowy, nie musisz pisać -t? - Andrew Samuelsen
Myślę, że w tej odpowiedzi jest błąd. Pierwotnie wykonałem polecenie bez -t i dostał You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout. ponieważ nie było lokalnego oddziału o tej samej nazwie. Musiałem ponownie wystartować -t naprawić. - stanri
To zadziałało dobrze - mój współpracownik dodał nowy zdalny oddział, który chciałem dodać do mojego lokalnego repo. Ciągle przynosiłem, ale nie widziałem nowego oddziału pojawiającego się lokalnie. Nie zdawałem sobie sprawy, że mogę po prostu uciec checkoutaby to stworzyć. Dzięki! - skwidbreth
zależy od wersji git. Najnowsza wersja, jak powiedziano tutaj w innym miejscu, potrzebuje tylko git checkout <nazwa oddziału na pochodzenie>. BĄDŹ OSTROŻNY Z LOKALNYM ROZWIĄZANIEM SAMOCHODOWYM a PILOTAMI ZDALNYMI - będą zepsuć rzeczy - leRobot


Posługiwać się git branch -a (zarówno lokalne, jak i odległe oddziały) lub git branch -r (tylko odległe gałęzie), aby zobaczyć wszystkie piloty i ich gałęzie. Możesz wtedy zrobić git checkout -t remotes/repo/branch do pilota i utworzyć oddział lokalny.

Istnieje również polecenie git ls-remote, aby zobaczyć wszystkie refs i znaczniki dla tego pilota.


37
2018-03-02 17:16



git checkout remotes/repo/branch sprawia, że ​​git checkout szuka pathspec, a nie zdalnego repo. - Erin
Tak, czy możliwe jest nawet wykupienie oddziału na zdalnym repo? Oczywiście (a może nie było to tak oczywiste), piloty są najpierw pobierane, aby je mieć lokalnie. Książka git ma dobrą sekcję na ich temat: git-scm.com/book/en/Git-Branching-Remote-Branches - Daniel Lee


Tytuł i pytanie są mylone:

  • Git pobiera zdalny oddział
  • jak mój kolega może wyciągnąć konkretnie tę gałąź.

Jeśli pytanie brzmi, w jaki sposób można uzyskać zdalną gałąź do pracy lub jak sprawdzić zdalny oddział w git, prostszym rozwiązaniem jest:

Z git (> = 1.6.6) możesz użyć:

git checkout <branch_name>

Jeśli lokalny <branch_name> nie znaleziono, ale istnieje gałąź śledzenia w dokładnie jednym zdalnym z pasującą nazwą, traktowana jako odpowiednik:

git checkout -b <branch_name> --track <remote>/<branch_name>

zobacz dokumentację do kasy Git

Dla twojego przyjaciela:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'

33
2018-03-31 10:48



Dziękuję Guillaume! Po prostu użyłem tego polecenia i napisałem post o tym, by przedstawić mój dokładny przypadek: leniel.net/2014/05/... - Leniel Maccaferri
<! - git checkout <nazwa-zdalnej-gałęzi> -> działa zgodnie z oczekiwaniami, dzięki Guillaume! - Sachidananda Naik


git checkout -b serverfix origin/serverfix

Jest to dość powszechna operacja, którą git udostępnia skrótowi: --track:

git checkout --track origin/serverfix

W rzeczywistości jest to tak powszechne, że istnieje nawet skrót do tego skrótu. Jeśli nazwa oddziału, którą próbujesz sprawdzić (a) nie istnieje i (b) dokładnie pasuje do nazwy tylko na jednym pilocie, Git utworzy dla Ciebie gałąź śledzącą:

git checkout serverfix

Aby skonfigurować oddział lokalny o innej nazwie niż gałąź zdalna, można łatwo użyć pierwszej wersji o innej nazwie lokalnego oddziału:

git checkout -b sf origin/serverfix

Teraz twój lokalny oddział sf automatycznie pobierze z origin / serverfix.

Źródło: Pro Git 2nd Edition, napisany przez Scotta Chacona i Bena Strauba(wyciąć dla czytelności)


24
2018-03-18 00:21



Prace! Dzięki Ci! - Karl Pokus


git fetch

git branch -r

git checkout <branch_name>

12
2017-12-04 20:53





Za pomocą tego prostego polecenia:

git checkout -b 'your_branch' origin/'remote branch'

11
2018-05-18 09:38



świetna prosta odpowiedź, która działa. powinien znajdować się w górnej części IMO - russiansummer


Możesz pobrać i odesłać zdalny oddział również za jednym razem: -

git fetch && git checkout the-branch-name

10
2018-03-25 06:43





Wpisałem

git checkout <branch_name>

i dostał

Branch <branch_name> set up to track remote branch <branch_name> from origin.
Switched to a new branch '<branch_name>'

9
2017-10-17 00:07



z dokumentacji Git Checkout: Jeśli <branch_name> nie zostanie znaleziony, ale istnieje gałąź śledzenia dokładnie na jednym pilocie o pasującej nazwie, traktuj jako odpowiednik: git checkout -b <branch_name> --track <remote>/<branch_name> - Guillaume Vincent