Mój kolega i ja pracujemy nad tym samym repozytorium, rozgałęziliśmy je na dwie gałęzie, każda technicznie dla innego projektu, ale mają one podobieństwa, więc czasami będziemy chcieli popełnić commit z powrotem do *master`` z
gałęzi`.
Jednakże, ja mam gałęzie
. Moje pytanie brzmi: **jak mój kolega może wyciągnąć tę gałąź specjalnie?
A git clone
of the repo nie wydaje się tworzyć gałęzi lokalnie dla niego, chociaż widzę je na żywo na unfuddle po pchnięciu z mojej strony.
Również, kiedy pierwotnie utworzyłem gałąź, zrobiłem -b checkout
. ***Nie jestem pewien, 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ą komendy, które uruchomiłem. Ale to zdecydowanie nie działa.
Chcę móc sprawdzić tę gałąź, a następnie popchnąć i popełnić z powrotem tylko zmiany w gałęzi z różnych współpracowników lub stacji roboczych.
Musisz utworzyć lokalną gałąź, która będzie śledzić zdalną gałąź. Poniższe polecenie utworzy lokalny oddział o nazwie daves_branch, śledzący zdalną gałąź origin/daves_branch. Kiedy wprowadzisz swoje zmiany, zdalna gałąź zostanie zaktualizowana.
Dla najnowszych 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 tym samym, 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 (mogłem zacząć wcześniej, ale jest to najwcześniejsze potwierdzenie, które mogłem szybko znaleźć):
git checkout daves_branch
Zauważ, że z ostatnimi wersjami git, to polecenie nie utworzy lokalnego oddziału i umieści cię w 'odłączonym HEAD' stanie. Jeśli chcesz mieć lokalną gałąź, użyj opcji --track
.
Pełne szczegóły tutaj: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches
Użyłem fetch
a następnie checkout
...
git fetch <remote> <rbranch>:<lbranch>
git checkout <lbranch>
...gdzie <rbranch>
jest zdalną gałęzią lub źródłowym ref, a <lbranch>
jest jeszcze nieistniejącą lokalną gałęzią lub destination ref, którą chcesz śledzić i którą prawdopodobnie chcesz nazwać tak samo jak zdalną gałąź lub ref źródłowy. Jest to wyjaśnione w options w wyjaśnieniu <refspec>
.
Git jest na tyle inteligentny, że automatycznie wykona pierwszą komendę, jeśli tab po pierwszych kilku literach zdalnej gałęzi. IE: Nie muszę nawet nadawać nazwy lokalnej gałęzi, Git automatycznie skopiuje nazwę zdalnej gałęzi za mnie. Dzięki Git!.
Również jak odpowiedź w tym podobnym poście SO pokazuje, jeśli nie'nazwiesz lokalnego oddziału w fetch
, nadal możesz go utworzyć, gdy go sprawdzisz, używając flagi -b
. IE: git fetch <remote> <branch>
a następnie git checkout -b <branch> <remote>/<branch>
robi dokładnie to samo, co moja początkowa odpowiedź. I najwyraźniej jeśli twoje repo ma tylko jednego zdalnego, to możesz po prostu zrobić git checkout <branch>
po fetch
i to stworzy lokalny oddział dla ciebie. EG: Właśnie sklonowałeś repo i chcesz sprawdzić dodatkowe gałęzie ze zdalnego.
Wierzę, że część dokumentacji dla fetch
mogła zostać skopiowana dosłownie z pull
. W szczególności sekcja na <refspec>
w options jest taka sama. Jednakże, nie wierzę, że fetch
będzie kiedykolwiek merge
, więc jeśli pozostawisz docelową stronę dwukropka pustą, fetch
nie powinien nic robić.
UWAGA: To, że git fetch <remote> <refspec>
jest skrótem od git fetch <remote> <refspec>:
, który zatem nic nie zrobi, ale git fetch <remote> <tag>
jest taki sam jak git fetch <remote> <tag>:<tag>
który powinien skopiować zdalny <tag>
lokalnie.
Domyślam się, że jest to pomocne tylko wtedy, gdy chcesz skopiować zdalny oddział lokalnie, ale niekoniecznie od razu go sprawdzić. W przeciwnym razie użyłbym teraz zaakceptowanej odpowiedzi powyżej, która jest szczegółowo wyjaśniona w pierwszej sekcji opisu kasy, a później w sekcji opcji pod wyjaśnieniem --track
, ponieważ jest to 1-liner. Cóż... rodzaj 1-linera, ponieważ wciąż musiałbyś uruchomić git fetch <remote>
najpierw.
FYI: Kolejność <refspecs>
(źródło:miejsce docelowe) wyjaśnia dziwaczną metodę sprzed Git-1.7 dla usuwania zdalnych gałęzi. IE: Nie wpychaj niczego do refspeca docelowego.
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. Możesz wtedy wykonać git checkout -t remotes/repo/branch
na pilocie i stworzyć lokalną gałąź.
Istnieje również polecenie git ls-remote, aby zobaczyć wszystkie refy i tagi dla tego pilota.