Mój kolega i ja pracujemy nad tym samym repozytorium. Rozgałęziliśmy go 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 branch
.
Mam jednak branch
. W jaki sposób mój kolega może specjalnie wykorzystać ten oddział?
A git clone
z repozytorium nie wydaje się tworzyć gałęzi lokalnie dla niego, chociaż widzę, jak działają na bieżąco po naciśnięciu mojego końca.
Poza tym, kiedy pierwotnie tworzyłem oddział, zrobiłem to -b checkout
. Czy to robi dużą różnicę?
$ 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 to na pewno nie działa.
Chcę móc sprawdzić tę gałąź, a następnie wypchnąć i zatwierdzić tylko zmiany gałęzi od różnych współpracowników lub stacji roboczych .
git
branch
git-branch
git-fetch
David
źródło
źródło
git fetch --all
Następnie, aby wyświetlić wszystkie gałęziegit branch
git checkout nameofnewbranch
git fetch origin discover:discover && git checkout discover
Odpowiedzi:
Musisz utworzyć oddział lokalny, który śledzi oddział zdalny. Następujące polecenie utworzy lokalną gałąź o nazwie daves_branch , śledząc początek zdalnej gałęzi / daves_branch . Po wprowadzeniu zmian oddział zdalny zostanie zaktualizowany.
W przypadku najnowszych wersji Git:
--track
jest skrótem dlagit checkout -b [branch] [remotename]/[branch]
gdzie [remotename] jest źródło w tym przypadku, a [gałąź] w dwa takie same, daves_branch w tym przypadku.W przypadku Git 1.5.6.5 potrzebujesz tego:
W przypadku Git 1.7.2.3 i nowszych to wystarczy (mogło zacząć się wcześniej, ale jest to najwcześniejsze potwierdzenie, jakie mogłem szybko znaleźć):
Zauważ, że w najnowszych wersjach Gita to polecenie nie utworzy lokalnego oddziału i wprowadzi cię w stan „odłączonej HEAD”. Jeśli chcesz mieć oddział lokalny, skorzystaj z
--track
opcji.Pełne szczegóły znajdują się tutaj: 3.5 Git Branching - Oddziały zdalne, Oddziały śledzące
źródło
git checkout -b --track daves_branch origin/daves_branch
Użyłem,
fetch
a następniecheckout
...... gdzie
<rbranch>
jest zdalna gałąź lub referencja źródłowa i<lbranch>
jest jeszcze nieistniejącą referencją lokalną lub docelową, którą chcesz śledzić i którą prawdopodobnie chcesz nazwać tak samo jak zdalna gałąź lub referencja źródłowa. Wyjaśniono to w opcjach w objaśnieniu<refspec>
.Git jest tak inteligentny, że automatycznie wykonuje pierwsze polecenie, jeśli kliknę tabulatorem po pierwszych kilku literach zdalnej gałęzi. Oznacza to, że nie muszę nawet nazywać gałęzi lokalnej, Git automatycznie kopiuje dla mnie nazwę gałęzi zdalnej. Dzięki Git!
Również, jak pokazuje odpowiedź w tym podobnym wpisie Przepełnienie stosu , jeśli nie podasz nazwy lokalnego oddziału
fetch
, możesz go nadal utworzyć, gdy go wyewidencjonujesz, używając-b
flagi. Oznacza to, żegit fetch <remote> <branch>
następujegit checkout -b <branch> <remote>/<branch>
dokładnie to samo, co moja pierwotna odpowiedź. I oczywiście, jeśli twoje repozytorium ma tylko jeden pilot, możesz to zrobićgit checkout <branch>
po tym,fetch
a on utworzy dla ciebie lokalny oddział. Na przykład właśnie sklonowałeś repozytorium i chcesz sprawdzić dodatkowe gałęzie ze zdalnego.Uważam, że część dokumentacji
fetch
mogła zostać skopiowana dosłownie zpull
. W szczególności sekcja<refspec>
w opcjach jest taka sama. Jednak nie wierzę, że tak sięfetch
staniemerge
, więc jeśli pozostawisz pustą stronę docelową jelita grubego,fetch
nie powinieneś nic robić .UWAGA:
git fetch <remote> <refspec>
jest skrótem, wgit fetch <remote> <refspec>:
związku z czym nic nie zrobiłby, alegit fetch <remote> <tag>
jest tym samym,git fetch <remote> <tag>:<tag>
co powinno skopiować pilota<tag>
lokalnie.Sądzę, że jest to pomocne tylko wtedy, gdy chcesz skopiować zdalny oddział lokalnie, ale niekoniecznie sprawdź go od razu. W przeciwnym razie użyłbym teraz zaakceptowanej odpowiedzi , która jest szczegółowo wyjaśniona w pierwszej części opisu kasy, a następnie w sekcji opcji pod wyjaśnieniem
--track
, ponieważ jest to jedna linijka. Cóż ... coś w stylu jednej linijki, ponieważ nadal będziesz musiał biegaćgit fetch <remote>
pierwszy.FYI: Kolejność
<refspecs>
(source: destination) wyjaśnia dziwną metodę pre Git 1.7 do usuwania zdalnych gałęzi . Oznacza to, że nie wrzucaj nic do refspec przeznaczenia.źródło
git fetch remote branch
ogóle nie dodałem głowy oddziału, chociaż wszystkie referencje zostały pobrane, więc kiedy próbowałem wykonać kroki w zaakceptowanej odpowiedzi, dostałem błądpathspec did not match any file(s) known to git.
, alerbranch:lbranch
podejście zadziałało. Co ciekawe, pobrał również wszystkie tagi, które rozpoczęły się z tym samym prefiksem, tak jakby to był symbol wieloznaczny (rbranch*
).fetch
polecenie. Ta zaakceptowana odpowiedź ma jednak sens, ponieważ OP zauważa, że już dokonał pobrania. Taki przynajmniej problem spotkałem.Jeśli próbujesz „pobrać” nową gałąź zdalną (która istnieje tylko na pilocie, ale nie lokalnie), oto, czego będziesz potrzebować:
Zakłada się, że chcesz pobrać z miejsca pochodzenia . Jeśli nie, wymień pochodzenie przez zdalne nazwy.
źródło
git fetch
igit fetch remote
zrobi to samo. Jeśli chcesz pobierać z pilota innego niżorigin
, możesz to zrobić za pomocągit fetch <other_remote_name>
. Ta sytuacja jest bardzo rzadka, wspomniana tutaj tylko dla kompletności.Aby pobrać myBranch, który istnieje zdalnie, a nie lokalnie - To zadziałało dla mnie:
Dostałem tę wiadomość:
źródło
-t
?-t
i otrzymałem,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 uruchomić,-t
aby naprawić.checkout
, żeby to stworzyć. Dzięki!--all
nigdy nie jest dobrym pomysłem, ponieważ pobierze każdy plik z każdej gałęzi. Zajmie to więcej czasu i przestrzeni. Lepiej być specyficzne nazwą oddziału i zrobić jak tenUżyj
git branch -a
(zarówno oddziałów lokalnych, jak i zdalnych) lubgit branch -r
(tylko oddziałów zdalnych), aby wyświetlić wszystkie piloty i ich oddziały. Następnie możesz zrobićgit checkout -t remotes/repo/branch
zdalne polecenie i utworzyć lokalny oddział.Istnieje również polecenie git-ls-remote, aby zobaczyć wszystkie referencje i tagi dla tego pilota.
źródło
git checkout remotes/repo/branch
sprawia, że git checkout szuka specyfiki ścieżki, a nie zdalnego repo.Tytuł i pytanie są mylone:
Jeśli pytanie brzmi, w jaki sposób mogę uzyskać dostęp do oddziału zdalnego lub w jaki sposób mogę uzyskać kasę oddziału zdalnego? , prostszym rozwiązaniem jest:
Dzięki Git (> = 1.6.6) możesz używać:
Jeśli
<branch_name>
nie znaleziono lokalnego , ale istnieje dokładnie gałąź śledzenia w dokładnie jednym pilocie o pasującej nazwie, potraktuj ją jako równoważną z:Zobacz dokumentację kasy Git
Dla twojego przyjaciela:
źródło
Najłatwiej to zrobić, przynajmniej dla mnie:
źródło
fetch
polecenia wymagany oddział będzie dostępny na komputerze lokalnym.git checkout -b 'your_branch' origin/'remote branch'
jest wymagany do kasy tego oddziału.Posługiwać się:
Jest to dość powszechna operacja, którą Git zapewnia
--track
skrótowo:W rzeczywistości jest to tak częste, że istnieje nawet skrót do tego skrótu. Jeśli nazwa gałęzi, którą próbujesz pobrać (a) nie istnieje i (b) dokładnie pasuje do nazwy tylko na jednym pilocie, Git utworzy dla ciebie gałąź śledzenia:
Aby skonfigurować oddział lokalny o innej nazwie niż oddział zdalny, możesz łatwo użyć pierwszej wersji z inną nazwą oddziału lokalnego:
Teraz Twój lokalny oddział
sf
będzie automatycznie pobierał daneorigin/serverfix
.Źródło: Pro Git, 2. edycja , napisane przez Scotta Chakona i Bena Strauba ( skrót dla czytelności)
źródło
Za pomocą tego prostego polecenia:
źródło
Aby pobrać gałąź, która istnieje na pilocie, najprostszym sposobem jest:
Możesz sprawdzić, czy już istnieje na pilocie za pomocą:
Spowoduje to pobranie oddziału zdalnego do lokalnego i automatyczne śledzenie oddziału zdalnego.
źródło
Pomogło mi to
1) Aby wyświetlić wszystkie dostępne zdalne gałęzie (np. „Nazwa zdalnego oddziału”)
2) Utwórz oddział lokalny, używając nazwy oddziału zdalnego
źródło
git push
bez innych argumentów? Czy lokalna gałąź o nazwie jestremote-branch-name
automatycznie kojarzona z (śledzącą) zdalną gałąź o nazwieorigin/remote-branch-name
. A może musisz uruchomićgit push -u origin remote-branch-name
Możesz także pobrać i sprawdzić zdalną gałąź w jednym ujęciu:
źródło
źródło
Wpisałem
i dostał
źródło
git checkout -b <branch_name> --track <remote>/<branch_name>
Czasami prosi się, abyście nie majstrowali przy gałęzi master i pracowali tylko nad gałęzią zdalną (tak jak mnie proszono). Wszystko czego potrzebujesz to zdalna gałąź.
Aby sklonować samą gałąź zdalną (bez systemu głównego), zrób to
gdzie nazwa_gałęzi_zdalnej to nazwa zdalnego oddziału
Na przykład,
Zapewni to klonowanie gałęzi zdalnej do gałęzi lokalnej z nazwą gałęzi zdalnej.
Teraz, jeśli zatwierdzisz swój kod i wypchniesz, kod zostanie przesłany tylko do tego oddziału.
źródło
[Szybka odpowiedź]
Istnieje wiele alternatyw, a moimi ulubionymi są:
- Alternatywa 1:
- Alternatywa 2:
źródło
Powiedzmy, że twój pilot to [email protected] i chcesz, aby jego gałąź random_branch. Proces powinien wyglądać następująco:
Najpierw sprawdź listę swoich pilotów przez
Jeśli nie masz zdalnego [email protected] w wynikach powyższego polecenia, dodaj go
Lokalny oddział my_copy_random_branch śledziłby gałąź random_branch twojego pilota.
źródło
git fetch --all & git checkout <branch name>
źródło
git fetch && git checkout <your friend's branch name>
powinien załatwić sprawęźródło
Chcę dać ci polecenie jednowierszowe do pobierania wszystkich zdalnych gałęzi do twojej lokalnej i przełącz się na twoją nowo utworzoną lokalną gałąź:
Po uruchomieniu powyższego polecenia pojawi się następujący komunikat:
Pierwszy wiersz mówi, że przeszedł na nowy oddział - dlaczego nowy? Jest już tam zdalnie!
Ale tak naprawdę musisz go utworzyć lokalnie. Gałąź jest pobierana ze zdalnego indeksu i tworzona lokalnie dla Ciebie.
Oto
discover
nowa gałąź, która została utworzona ze zdalnej gałęzi twojego repozytoriumdiscover
.Ale druga linia zawiera więcej informacji niż pierwsza, która mówi nam, że:
Nasz oddział jest skonfigurowany do śledzenia zdalnego oddziału o tej samej nazwie.
Chociaż
git fetch
pobiera wszystkie oddziały do lokalnego. Ale jeśli pobiegnieszgit branch
za nim, zobaczysz tylkomaster
oddział lokalny. Dlaczego ?Ponieważ dla każdej gałęzi, którą masz zdalnie, musisz utworzyć ją również lokalnie, aby śledzić ją, tak
git checkout <branchname>
jak to zrobiliśmy w powyższym przykładzie.Po uruchomieniu
git checkout
polecenia możesz uruchomićgit branch
, a teraz możesz zobaczyć oba oddziały:źródło
Jeśli chcesz pobrać wszystkie zdalne gałęzie, wpisz tylko:
źródło
Po prostu spróbuj:
źródło
Jeśli masz repozytorium, które zostało sklonowane,
--depth 1
wiele z wymienionych poleceń nie będzie działać. Na przykład patrz tutajW takim przypadku przełożyłbym repozytorium, ale być może istnieją inne techniki, np. Git płytkie klonowanie
źródło
Jeśli znasz już swój zdalny oddział ...
i znasz nazwę oddziału, który chcesz sprawdzić , na przykład br1.2.3.4 , a następnie zrób to
Pozostaje tylko sprawdzić oddział
Następnie zrób z niego nowe gałęzie.
źródło
Kroki są następujące;
git fetch origin
lubgit fetch --all
spowoduje to pobranie wszystkich zdalnych gałęzi do twojego lokalnego, a następnie będzie to druga opcja, którą możesz wykonać.git checkout --track origin/<The_remote_branch you want to switch over>
Następnie pracuj nad tym oddziałem i możesz sprawdzić, czy jesteś w tym oddziale, czy nie, wpisując
Wyświetla gałąź, w której aktualnie się znajdujesz.
źródło
git branch <name> --track origin/<name>
źródło
Sprawdź
.git/config
plik, a zwłaszcza to, jakie śledzenie jest dostępne podczas pobierania dla tego pilota.Jeśli ma
heads/*
wskazywaćrandomRemote/*
, po uruchomieniugit fetch randomRemote
pobierze wszystkie gałęzie.Następnie możesz po prostu pobrać tę gałąź.
Inaczej,
W tym celu musisz dodać zdalne oddziały do śledzenia. Sprawdź swoje
.git/config
po uruchomieniu tego. Zrozumiesz.Uruchom
git fetch randomRemote
. Spowoduje to pobranie oddziału zdalnego.Teraz możesz biegać
git checkout randomBranch
.źródło
Używasz „git pull”, aby oddzielić swoje gałęzie. Użyję rzeczywistych nazw repozytoriów i gałęzi, aby pomóc, ponieważ „lbranch” i „rbranch” są trudne do odczytania.
Użyjmy:
Ty lub dowolny kolega możecie uruchomić to, aby pobrać tylko swój oddział, bez względu na liczbę oddziałów:
źródło
Proste polecenie
git checkout remote_branch_name
pomoże ci stworzyć lokalny oddział, który ma wszystkie zmiany w zdalnym oddziale.źródło
źródło