Jestem przyzwyczajony do uruchamiania git pull i innych poleceń z gałęzi, nad którą pracuję. Ale skonfigurowałem serwer programistyczny, na którym pracuje kilka osób, więc nie chcę zmieniać gałęzi, kiedy to robię. Jeśli chcę zaktualizować istniejącą gałąź na serwerze deweloperskim z repozytorium github, z którego wszyscy korzystamy, jaki byłby właściwy sposób na zrobienie tego? Jeśli uruchomię polecenie „git pull github branchname”, czy to po prostu ściągnie gałąź do bieżącej gałęzi?
Wszystkie przykłady gita, które mogę znaleźć, wydają się wskazywać, że najpierw uruchamiasz 'checkout branchname', a następnie wykonujesz pull. Próbuję tego uniknąć. Jak powiedziałem, jest to istniejąca gałąź i chcę tylko zaktualizować do najnowszej wersji.
git fetch
powinieneś robić, co chcesz.git fetch
zaktualizowałaby lokalną kopię zdalnego oddziału, ale nie żadnego lokalnego oddziału, nawet jeśli jeden jest skonfigurowany do śledzenia tej konkretnej zdalnej gałęzi. Może, ale nie musi, być tym, czego chcieliśmy. (Edycja: w każdym razie domyślnie. Można to wywołać z argumentami, aby zachowywał się inaczej, ale w takim przypadku argumenty powinny być naprawdę podkreślone.)Odpowiedzi:
Szukałem tego samego i w końcu znalazłem odpowiedź, która zadziałała dla mnie w innym poście z przepełnieniem stosu : Scal, aktualizuj i wyciągaj gałęzie Git bez korzystania z kasy
Gruntownie:
git fetch <remote> <srcBranch>:<destBranch>
źródło
pull
posiada parametry, żefetch
nie:-s <strategy>
,-Xsubtree=...
co było istotne dla mnie, więc nie jest to odpowiednik wymiana. Miałem problem opisany tutaj: congruityservice.com/blog/… ale w moim przypadku w ogóle nie chciałem kasy.git pull <remote> <srcBranch>:<destBranch>
.git fetch . origin/master:master
Miałem ten sam problem z koniecznością zatwierdzania lub przechowywania bieżących zmian funkcji, gałęzi głównej kasy , wykonaj
pull
polecenie, aby uzyskać wszystko, od zdalnego do lokalnegomaster
obszaru roboczego, a następnie przełączyć się ponownie na gałąź funkcji i wykonać,rebase
aby zaktualizować ją z mistrz.Aby to wszystko zrobić, zachowaj obszar roboczy w gałęzi funkcji i unikaj przełączania, robię to:
git fetch origin master:master
git rebase master
I to ładnie załatwia sprawę.
źródło
feature
i WSZYSTKO, co chcesz zrobić, to zaktualizować lokalny,master
aby był zgodny z pochodzeniem, BEZ dotykaniafeature
, po prostu zróbgit fetch origin master:master
... i to tak, jakbyś to zrobił Kasa-w-kasieMaster-pull-checkoutFeature-stashPop!git merge origin/master
Jeśli chcesz, aby wskazówki lokalnego oddziału zostały ponownie skierowane po
git fetch
, potrzebujesz dodatkowych kroków.Bardziej konkretnie, załóżmy repo github ma oddziałów
D
,B
,C
orazmaster
(powodem tego oddziału nieparzystej nazwa-zestawu będzie jasne za chwilę). Jesteś na hościedevhost
i jesteś w repozytorium, w którymorigin
znajduje się repozytorium github. Robiszgit fetch
, co przynosi w stosunku do wszystkich obiektów i aktualizacjiorigin/D
,origin/B
,origin/C
, iorigin/master
. Na razie w porządku. Ale teraz mówisz, że chcesz coś się wydarzy, nadevhost
, do lokalnych oddziałówD
,B
,C
, i / lubmaster
?Mam te oczywiste (przynajmniej dla mnie) pytania:
B
) Ma zatwierdzenia, których brakuje w zdalnym (github) repozytorium? Czy powinny zostać scalone, przebudowane, czy ...?C
), A katalog roboczy i / lub indeks są zmodyfikowane, ale nie zatwierdzone?A
) i / lub usunięte gałęzie (D
)?Jeśli odpowiedź na (1) brzmi „ponieważ
devhost
nie jest w rzeczywistości przeznaczona do programowania, ale raczej jest lokalnym serwerem lustrzanym, który po prostu przechowuje lokalnie dostępną kopię repozytorium github, aby wszyscy nasi programiści mogli szybko czytać z niego zamiast powoli czytać github ”, wtedy chcesz mieć„ lustro ”zamiast„ normalnego ”repozytorium. Nie powinien mieć katalogu roboczego i być może nie powinien też akceptować wypychania, w takim przypadku pozostałe pytania po prostu znikają.Jeśli jest jakaś inna odpowiedź, (2-4) stają się problematyczne.
W każdym razie, oto sposób na rozwiązanie problemu aktualizowania lokalnych referencji na podstawie zdalnych referencji (
git fetch -p
na przykład po uruchomieniu ):To, co znajduje się w tej
... code here ...
sekcji, zależy od odpowiedzi na pytania (2-4).źródło
Posługiwać się
zamiast. Aktualizuje zdalne referencje i obiekty w repozytorium, ale pozostawia lokalne oddziały, HEAD i obszar roboczy w spokoju.
źródło
EDYTUJ: Użyj 'git pull' Pobierze wszystkie gałęzie z repozytorium i zaktualizuje również do najnowszej, jeśli oddział zostanie zamknięty w systemie lokalnym tylko dla bieżącej gałęzi. Uwaga: git pull jest odpowiednikiem funkcji fetch + merge, która pobiera wszystkie gałęzie, ale łączy tylko bieżącą gałąź.
źródło
pull
wykonuje pobieranie (które, tak, pobiera wszystko z pilota), ale następnie scala tylko bieżącą gałąź.