Perbarui cabang lokal dengan perubahan dari cabang jarak jauh yang dilacak

96

Saya memiliki cabang lokal bernama ' my_local_branch', yang melacak cabang jarak jauh origin/my_remote_branch.

Sekarang, cabang jarak jauh telah diperbarui, dan saya berada di ' my_local_branch' dan ingin menarik perubahan itu. Haruskah saya melakukan:

git pull origin my_remote_branch:my_local_branch

Apakah ini cara yang benar?

skyork
sumber

Jawaban:

72

Anda telah mengatur hulu cabang tersebut

(Lihat:

git branch -f --track my_local_branch origin / my_remote_branch
# ATAU (jika my_local_branch saat ini diperiksa):
$ git branch --set-upstream-to my_local_branch origin / my_remote_branch

( git branch -f --tracktidak akan berfungsi jika cabang dicentang: gunakan perintah kedua git branch --set-upstream-to sebagai gantinya, atau Anda akan mendapatkan " fatal: Cannot force update the current branch.")

Itu berarti cabang Anda sudah dikonfigurasi dengan:

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

Git sudah memiliki semua informasi yang diperlukan.
Dalam hal itu:

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

cukup.


Jika Anda belum membangun hubungan cabang upstream ketika harus mendorong ' my_local_branch' Anda, maka yang sederhana git push -u origin my_local_branch:my_remote_branchsudah cukup untuk mendorong dan mengatur cabang upstream.
Setelah itu, untuk tarikan / dorongan berikutnya, git pullatau git pushakan, sekali lagi, sudah cukup.

VonC
sumber
OP menyebutkan bahwa mereka sudah melacak cabang jarak jauh.
Amber
7
@Amber maka jawaban saya: git pullcukup.
VonC
Perintah pertama git branch -f --track master origin/mastermengembalikan kesalahan:fatal: Cannot force update the current branch.
Mark Kramer
@MarkKramer Ya, saya telah mengedit jawabannya untuk memperjelas perintah kedua yang akan digunakan jika cabang lokal sedang diperiksa.
VonC
Anda juga harus mengubahnya menjadi --set-upstream-to, --set-upstreamtidak digunakan lagi dan akan dihapus.
Mark Kramer
89

Anda tidak menggunakan :sintaks - pullselalu mengubah cabang yang saat ini diperiksa. Jadi:

git pull origin my_remote_branch

sementara Anda telah my_local_branchmemeriksa akan melakukan apa yang Anda inginkan.

Karena Anda sudah menetapkan cabang pelacakan, Anda bahkan tidak perlu menentukan - Anda bisa melakukan ...

git pull

sementara Anda telah my_local_branchmemeriksa, dan itu akan diperbarui dari cabang yang dilacak.

Amber
sumber
Ini harus menjadi jawaban yang benar. Sesederhana itu.
m4l490n