Zaktualizuj oddział lokalny, wprowadzając zmiany ze śledzonego oddziału zdalnego

101

Mam lokalny oddział o nazwie „ my_local_branch”, który śledzi oddział zdalnyorigin/my_remote_branch .

Teraz zdalna gałąź została zaktualizowana i jestem na „ my_local_branch” i chcę pobrać te zmiany. Powinienem po prostu zrobić:

git pull origin my_remote_branch:my_local_branch

Czy to właściwy sposób?

skyork
źródło

Odpowiedzi:

74

Ustawiłeś upstream tej gałęzi

(widzieć:

git branch -f --track my_local_branch origin / my_remote_branch
# LUB (jeśli moja_lokalna_branch jest aktualnie wyrejestrowana):
$ git branch --set-upstream-to my_local_branch origin / my_remote_branch

( git branch -f --tracknie zadziała, jeśli gałąź jest wyewidencjonowana: użyj git branch --set-upstream-to zamiast tego drugiego polecenia , albo otrzymasz "fatal: Cannot force update the current branch. ”)

Oznacza to, że Twój oddział jest już skonfigurowany z:

branch.my_local_branch.remote origin
branch.my_local_branch.merge my_remote_branch

Git ma już wszystkie niezbędne informacje.
W tym wypadku:

# if you weren't already on my_local_branch branch:
git checkout my_local_branch 
# then:
git pull

wystarczy.


Gdybyś nie ustanowił tej relacji odgałęzienia upstream, gdy przyszedłby do wypchnięcia twojego ' my_local_branch', wystarczyłby prosty git push -u origin my_local_branch:my_remote_branch, aby wypchnąć i ustawić gałąź upstream.
Po tym, dla kolejnych pociągnięć / pchnięć, git pulllub git pushznowu, wystarczyłoby.

VonC
źródło
OP wspomina, że ​​śledzą już zdalną gałąź.
Amber
7
@Amber stąd moja odpowiedź: git pullwystarczy.
VonC,
Pierwsze polecenie git branch -f --track master origin/masterzwraca błąd:fatal: Cannot force update the current branch.
Mark Kramer
@MarkKramer Tak, zredagowałem odpowiedź, aby była jaśniejsza. Drugie polecenie ma być używane, jeśli lokalna gałąź jest obecnie wyewidencjonowana.
VonC
Powinieneś także zmienić to na --set-upstream-to, --set-upstreamjest przestarzałe i zostanie usunięte.
Mark Kramer
91

Nie używasz :składni - pullzawsze modyfikuje aktualnie wyewidencjonowaną gałąź. A zatem:

git pull origin my_remote_branch

gdy się my_local_branchwymeldowałeś, zrobisz, co chcesz.

Ponieważ masz już ustawioną gałąź śledzenia, nie musisz nawet określać - możesz po prostu zrobić ...

git pull

gdy się my_local_branchwyewidencjonowałeś, i zaktualizuje się z śledzonej gałęzi.

Bursztyn
źródło
1
To powinna być prawidłowa odpowiedź. To takie proste.
m4l490n