Git fetch Remote branch

Mój kolega i ja pracujemy nad tym samym repozytorium rozgałęziliśmy je na dwie gałęzie, każda technicznie dla różnych projektów, ale mają one podobieństwa, Więc czasami będziemy chcieli wrócić do * master z gałęzi.

Mam jednak gałąź. Moje pytanie brzmi, jak mój kolega może dokładnie wyciągnąć tę gałąź? A git clone repo nie wydaje się tworzyć gałęzie lokalnie dla niego, choć widzę je na żywo po naciśnięciu na mojej stronie.

Także, kiedy początkowo tworzyłem gałąź, zrobiłem -b checkout. Nie jesteś pewien, czy to robi 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 wykonałem. Ale to na pewno nie działa. Chcę być w stanie sprawdzić tę gałąź, a następnie popchnąć i zatwierdzić tylko zmiany gałęzi od różnych współpracowników lub stacji roboczych.
Author: AshNaz87, 2012-03-02

25 answers

Musisz utworzyć lokalną gałąź, która śledzi gałąź zdalną. Poniższe polecenie utworzy lokalną gałąź o nazwie daves_branch , śledząc zdalną gałąź origin/daves_branch . Po wypchnięciu zmian zdalna gałąź zostanie zaktualizowana.

Dla większości wersji git:

git checkout --track origin/daves_branch

--track jest skrótem od git checkout -b [branch] [remotename]/[branch] gdzie [remotename] jest origin w tym przypadku, a [branch] jest dwa razy to samo, daves_branch w tym przypadku.

Dla git 1.5.6.5 potrzebowałeś tego:

git checkout --track -b daves_branch origin/daves_branch

Dla git 1.7.2.3 i wyższych jest to wystarczające (może zaczęło się wcześniej, ale jest to najwcześniejsze potwierdzenie, jakie udało mi się znaleźć szybko):

git checkout daves_branch

Zauważ, że w ostatnich wersjach Gita, to polecenie nie utworzy lokalnej gałęzi i spowoduje, że stan zostanie odłączony. Jeśli chcesz mieć lokalną gałąź, użyj opcji --track. Szczegóły tutaj: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches

 2304
Author: ralphtheninja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-05 16:10:03

Użyłem fetch następnie checkout ...

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

... gdzie <rbranch> jest zdalną gałęzią lub źródłowym ref i <lbranch> jest jeszcze nieistniejącym lokalnym oddziałem lub docelowym ref, który chcesz śledzić i który prawdopodobnie chcesz nazwać tak samo jak zdalna gałąź lub źródło ref. Jest to wyjaśnione w opcje w wyjaśnieniu <refspec>.

Git jest tak inteligentny, że automatycznie wykonuje pierwsze polecenie, jeśli tab po kilku pierwszych literach zdalnej gałęzi. IE: nie muszę nawet nazywać lokalnej gałęzi, Git automatycznie kopiuje dla mnie nazwę zdalnej gałęzi. Dzięki Git!

Również jako odpowiedź w tym podobnym poście pokazuje, że jeśli nie nazwiesz lokalnej gałęzi w fetch, nadal możesz ją utworzyć, gdy ją sprawdzisz, używając znacznika -b. IE: git fetch <remote> <branch> po którym następuje git checkout -b <branch> <remote>/<branch> robi dokładnie to samo, co moja początkowa odpowiedź. I ewidentnie jeśli twój repo posiada tylko jeden zdalny, wtedy możesz po prostu zrobić git checkout <branch> po fetch i utworzy dla Ciebie lokalną gałąź. NP: właśnie sklonowałeś repo i chcesz sprawdzić dodatkowe gałęzie z pilota.

Uważam, że część dokumentacji fetch mogła zostać skopiowana dosłownie z pull. W szczególności sekcja <refspec> w opcje jest taka sama. Nie wierzę jednak, że fetch kiedykolwiekmerge, tak, że jeśli opuścisz strona docelowa dwukropka pusta fetch nie powinno nic robić .

Uwaga: to git fetch <remote> <refspec> jest skrótem od git fetch <remote> <refspec>:, które zatem nic nie robi, ale git fetch <remote> <tag> jest tym samym, co git fetch <remote> <tag>:<tag>, które powinno skopiować zdalny <tag> lokalnie.

Myślę, że jest to pomocne tylko wtedy, gdy chcesz skopiować zdalną gałąź lokalnie, ale niekoniecznie od razu ją sprawdzić. W przeciwnym razie użyłbym zaakceptowanej odpowiedzi powyżej , która została szczegółowo wyjaśniona w pierwszej części opis kasy i później w sekcji opcje pod wyjaśnieniem --track, ponieważ jest to 1-liner. Cóż... coś w rodzaju 1-linera, ponieważ ty byś nadal musiał najpierw uruchomić git fetch <remote>.

FYI: kolejność <refspecs> (źródło:destination) wyjaśnia dziwaczną metodę pre Git-1.7 Dla usuwania zdalnych gałęzi . IE: nic nie wepchnąć do docelowego refspec.

 761
Author: Mark Mikofski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:58

Jeśli próbujesz "wymeldować" nową zdalną gałąź (która istnieje tylko na zdalnym, ale nie lokalnie), oto czego potrzebujesz:

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

Zakłada się, że chcesz pobrać z origin . Jeśli nie, zastąp origin przez swoją remote nazwę.

 280
Author: paneer_tikka,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-06 07:24:54

Do kasy myBranch, który istnieje zdalnie, a nie lokalnie - to mi się udało:

git fetch --all
git checkout myBranch

Dostałem tę wiadomość:

Branch myBranch set up to track remote branch myBranch from origin
Switched to a new branch 'myBranch'
 89
Author: David,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-12 03:36:22

Użyj git branch -a (zarówno lokalne, jak i zdalne gałęzie) lub git branch -r (tylko zdalne gałęzie), aby zobaczyć wszystkie piloty i ich gałęzie. Następnie możesz wykonać git checkout -t remotes/repo/branch do zdalnego i utworzyć lokalną gałąź.

Istnieje również polecenie git LS-remote, aby zobaczyć wszystkie refy i Tagi dla tego pilota.

 38
Author: Daniel Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-25 13:01:32

Tytuł i pytanie są pomieszane:

  • Git fetch Remote branch
  • jak mój kolega może wyciągnąć tę gałąź konkretnie.

Jeśli pytanie brzmi jak uzyskać zdalną gałąź do pracy lub jak git checkout zdalnej gałęzi, prostszym rozwiązaniem jest:

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

git checkout <branch_name>

Jeśli lokalny <branch_name> nie został znaleziony, ale istnieje gałąź śledząca dokładnie w jednym zdalnym o pasującej nazwie, traktuj jako odpowiednik:

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

Zobacz dokumentację dla git checkout

Dla Twojego przyjaciela:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
 33
Author: Guillaume Vincent,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-31 10:53:41
git checkout -b serverfix origin/serverfix

Jest to dość powszechna operacja, którą git dostarcza skrótu --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 gałęzi, którą próbujesz zrealizować zamówienie (a) nie istnieje i (B) dokładnie pasuje do nazwy tylko jednego pilota, Git utworzy dla Ciebie gałąź śledzącą:
git checkout serverfix

Aby skonfigurować lokalną gałąź o innej nazwie niż zdalna, możesz łatwo użyć pierwszej wersji z inną lokalną gałąź Nazwa:

git checkout -b sf origin/serverfix

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

Pro Git 2nd Edition, napisany przez Scotta Chacona i Bena Strauba (cut for readability)
 24
Author: ManuelSchneid3r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-18 14:13:14

Tym prostym poleceniem:

git checkout -b 'your_branch' origin/'remote branch'
 13
Author: Karthik damodara,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-12 19:13:05
git fetch

git branch -r

git checkout <branch_name>
 12
Author: John Rodriguez,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-04 21:13:32

Możesz pobrać i sprawdzić zdalną gałąź za jednym razem: -

git fetch && git checkout the-branch-name
 11
Author: Kumar Sambhav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-03-25 06:43:02

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
Author: Guillaume Guillaume,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-10 22:43:19

Najprostszy sposób, przynajmniej dla mnie:

git fetch origin <branchName>
 9
Author: James Rochabrun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-20 01:00:14

Czasami jesteś proszony, aby nie bawić się gałąź master i pracować tylko gałąź zdalną (tak jak zostałem poproszony). Więc wszystko czego potrzebujesz to zdalna gałąź.

Aby sklonować zdalną gałąź samodzielnie (bez master), zrób to]}
git clone url --branch remote_branch_name

Gdzie, remote_branch_name jest nazwą zdalnej gałęzi

Na przykład,

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

To upewni się, że sklonujesz zdalną gałąź do lokalnej gałęzi z nazwą zdalnej gałęzi.

Teraz, jeśli popełnisz swój code I push, kod zostanie przesłany do tej gałęzi sam.

 8
Author: ganezdragon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-06 05:11:05

git fetch --all & git checkout <branch name>

 7
Author: Jerome Anthony,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-20 00:42:13

Powiedzmy, że twój pilot to [email protected] i chcesz jego gałąź random_branch. Proces powinien być następujący:

  1. Najpierw sprawdź listę swoich pilotów przez

    git remote -v

  2. Jeśli nie masz [email protected] remote w wyniku powyższego polecenia, dodałbyś go przez

    git remote add xyz [email protected]

  3. Teraz możesz pobrać zawartość tego pilota przez

    git fetch xyz

  4. Teraz sprawdź oddział tego pilota przez

    git checkout -b my_copy_random_branch xyz/random_branch

  5. Sprawdź listę gałęzi według

    git branch -a

Lokalna gałąź my_copy_random_branch będzie śledzić gałąź random_branch Twojego pilota.

 4
Author: zafar142003,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-06 16:59:13

git fetch && git checkout <your friend's branch name> should do the trick

 4
Author: tambakoo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-25 11:37:50

Kroki są następujące;

  1. git fetch origin lub git fetch --all, spowoduje to pobranie wszystkich zdalnych gałęzi do twojej lokalnej, a następnie jest to druga opcja, którą możesz przetworzyć.

  2. git checkout --track origin/<The_remote_branch you want to switch over>

Następnie pracuj nad tą gałęzią i możesz sprawdzić, czy jesteś na tej gałęzi, czy nie, wpisując

git branch

Wyświetla gałąź, w której aktualnie się znajdujesz.

 3
Author: Sam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-26 10:09:11

Jeśli już znasz swoją zdalną gałąź tak...

git remote
=> One
=> Two

I znasz nazwę oddziału, który chcesz sprawdzić ex. br1.2.3.4 Następnie wykonaj

git fetch One
=> returns all meta data of remote i.e. the branch name in question.

Wszystko, co pozostało, to sprawdzić Oddział

git checkout br.1.2.3.4

Potem zrób z niego nowe gałęzie.

 3
Author: SoEzPz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-26 17:51:26

Sprawdź swoje .git/config, w szczególności jakie śledzenie jest obecne na pobierz dla tego pilota.

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

Jeśli heads/* wskazuje na randomRemote/*, to po uruchomieniu git fetch randomRemote pobierze wszystkie gałęzie. Potem możesz po prostu sprawdzić ten oddział.

Inaczej,

  1. Musisz dodać zdalne gałęzie do śledzenia za pomocą tego. Sprawdź swój .git/config po uruchomieniu tego. Zrozumiesz. git remote set-branches --add randomRemote randomBranch

  2. Run git fetch randomRemote. To ściągnie zdalną gałąź.

  3. Teraz możesz biec git checkout randomBranch

 2
Author: Vamshi Suram,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-01 14:29:24

Używasz 'git pull', aby trzymać swoje gałęzie osobno. Użyję rzeczywistych nazw repo i gałęzi, aby pomóc, ponieważ' lbranch 'i' rbranch ' jest trudny do rozszyfrowania.

Użyjmy:

  • myteam.unfuddle.com = zdalny serwer git
  • tlc = konto projektu unfuddle, w którym istnieje repo
  • daves_branch = remote branch name

    Ty, lub jakikolwiek kolega, możesz to uruchomić, aby wyciągnąć tylko swoją gałąź, bez względu na to, ile jest gałęzi:

    git init
    git pull [email protected]:myteam/tlc daves_branch:refs/remotes/origin/daves_branch
    
  •  1
    Author: Andrew,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2013-05-22 21:10:02

    Po prostu spróbuj

    $git pull origin your_branch_name

     1
    Author: Rizo,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2017-12-12 20:44:31

    Jeśli masz repozytorium sklonowane za pomocą --depth 1, wiele z wymienionych poleceń nie będzie działać. Na przykład patrz tutaj

    % git clone --depth 1 https://github.com/repo/code
    Cloning into 'code'...
    cd code
    remote: Counting objects: 1778, done.
    remote: Compressing objects: 100% (1105/1105), done.
    remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
    Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
    Resolving deltas: 100% (87/87), done.
    Checking connectivity... done.
    Checking out files: 100% (1215/1215), done.
    % cd code
    % git checkout other_branch
    error: pathspec 'other_branch' did not match any file(s) known to git.
    % git fetch origin other_branch
    remote: Counting objects: 47289, done.
    remote: Compressing objects: 100% (15906/15906), done.
    remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
    Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
    Resolving deltas: 100% (30151/30151), completed with 362 local objects.
    From https://github.com/repo/code
     * branch            other_branch-> FETCH_HEAD
    % git checkout other_branch
    error: pathspec 'other_branch' did not match any file(s) known to git.
    %
    

    W tym przypadku powtórzyłbym repo, ale być może istnieją inne techniki np. git shallow clone (Clone --depth) misses remote branches

     1
    Author: Colin D,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2018-01-24 21:21:03

    Proste polecenie - "Git checkout remote_branch_name" pomoże Ci stworzyć lokalną gałąź, która ma wszystkie zmiany w gałęzi zdalnej.

     0
    Author: SIjeesh Kattumunda,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2018-01-19 12:34:41

    git branch <name> --track origin/<name>

     0
    Author: Chris F Carroll,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2018-03-11 18:02:34

    Pomogło mi

    1) Aby wyświetlić wszystkie dostępne zdalne gałęzie (np. 'remote-branch-name')

    git branch -r
    

    2) Utwórz lokalną gałąź używając nazwy zdalnej gałęzi

    git fetch && git checkout 'remote-branch-name'
    
     0
    Author: Arlan T,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2018-09-17 02:16:14