Lacak cabang jarak jauh baru yang dibuat di GitHub

183

Saya sudah mendapatkan cabang master lokal yang melacak cabang master jarak jauh dari proyek github. Sekarang, kolaborator saya telah membuat cabang baru di proyek yang sama, dan saya ingin melakukan hal berikut sesuai:

  1. buat cabang baru secara lokal
  2. buat cabang baru ini melacak cabang jarak jauh yang baru dibuat.

Bagaimana saya melakukannya dengan benar?

MLister
sumber
2
git checkout --track -b <cabang lokal> <remote> / <cabang terlacak> juga berfungsi.
MLister
14
... atau adil git checkout -t <remote>/<whatever>. Jika hanya ada satu cabang pelacak jarak jauh yang berakhir di <whatever>Anda bahkan bisa melakukan git checkout <whatever>dan git menebak apa yang Anda maksud.
Mark Longair

Jawaban:

251
git fetch
git branch --track branch-name origin/branch-name

Perintah pertama memastikan Anda memiliki cabang jarak jauh di repositori lokal. Perintah kedua membuat cabang lokal yang melacak cabang jarak jauh. Diasumsikan bahwa nama jarak jauh Anda origindan nama cabang adalah branch-name.

--track Opsi ini diaktifkan secara default untuk cabang jarak jauh dan Anda dapat menghilangkannya.

maks
sumber
3
Ketika saya melakukan ini, saya mendapatkan peringatan: refname 'nama-cabang' adalah ambigu.
Ultrasaurus
19
Jika hanya ada satu cabang jarak jauh dengan nama cabang itu, Anda cukup melakukan git checkout <branchname>dan git akan secara otomatis memeriksanya dan mengatur cabang pelacakan. Hanya ingin mengulangi apa yang dikatakan @Mark Longair di atas dalam komentar ini: stackoverflow.com/questions/11262703/… .
Ryan Walls
Nama cabang jarak jauh saya adalah remotes/origin/develop? Bukankah seharusnya begitu origin/develop? Apakah ini sama?
ア レ ッ ク ス
2
Saya harus melakukannya git fetch --all, kalau tidak cabang-cabang baru tidak akan diambil
mschrimpf
Bagaimana cara melakukannya di Eclipse? Ketika saya selesai dengan itu cmd, gerhana mendeteksi cabang baru?
Deckard
31

Jika Anda tidak memiliki cabang lokal yang ada, itu benar-benar sesederhana:

git fetch
git checkout <remote-branch-name>

Misalnya jika Anda mengambil dan ada cabang pelacakan jarak jauh baru yang disebut origin/feature/Main_Page, lakukan saja ini:

git checkout feature/Main_Page

Ini membuat cabang lokal dengan nama yang sama dengan cabang jarak jauh, melacak cabang jarak jauh itu. Jika Anda memiliki beberapa remote dengan nama cabang yang sama, Anda dapat menggunakan yang kurang ambigu:

git checkout -t <remote>/<remote-branch-name>

Jika Anda sudah membuat cabang lokal dan tidak ingin menghapusnya, lihat Bagaimana Anda membuat cabang Git yang ada melacak cabang jarak jauh? .

kotoole
sumber
1
git checkout 1.5-branch( remotes/upstream/1.5-branchdalam output of git branch -a) hasil dalam error: pathspec '1.5-branch' did not match any file(s) known to git.Mengubah ini untuk git checkout upstream/1.5-branchhasil dalam KEPALA terlepas dan tidak ada cabang lokal dibuat. Saya pikir ini bagian dari jawaban yang salah. Ini dengan git 2.4.3
Piotr Dobrogost
Perintah pertama bekerja untuk saya di git 1.9.3, bahkan untuk remote yang berbeda. Mungkin saja perilaku ini telah berubah. Hasil dari perintah kedua Anda adalah apa yang saya harapkan. Tanpa -t, Anda tidak menentukan bahwa Anda ingin melakukan apa pun selain melihat versi spesifik pada remote.
kotoole
1
Saya setuju dengan @PiotrDobrogost, saya percaya pernyataan Anda "Ini menciptakan cabang lokal dengan nama yang sama ..." salah. Apa yang akan dilakukan (ketika dipanggil dengan cara ini) adalah membuat cabang pelacakan jarak jauh untuk setiap cabang di remote. Itu berarti cabang di repo lokal Anda bernama <remote>/<branch>. Cabang pelacakan jarak jauh hanya baca, yang menunjukkan di mana cabang itu berada pada jarak jauh pada pengambilan terakhir. Memanggil checkoutref cabang itu menempatkan Anda dalam mode HEAD yang terpisah, seperti yang dikatakan Piotr. Perhatikan bahwa menentukan cabang jarak jauh untuk diambil akan menghindari membuat cabang pelacakan jarak jauh yang tidak diinginkan.
scanny
2
Untuk menjadi jelas sekali lagi: Saya menyarankan menggunakan perintah git checkout feature-branch. Saya TIDAK menyarankan menggunakan perintah git checkout origin/feature-branch yang, seperti yang telah Anda berdua tunjukkan, akan menghasilkan kepala terpisah yang tidak membantu.
kotoole
jauh lebih sederhana dan to the point. Bekerja dengan baik dengan git 2.8.3 di cygwin.
Felipe Alvarez
29

Pertama-tama Anda harus mengambil repositori jarak jauh:

git fetch remoteName

Daripada Anda dapat membuat cabang baru dan mengaturnya untuk melacak cabang jarak jauh yang Anda inginkan:

git checkout -b newLocalBranch remoteName/remoteBranch

Anda juga dapat menggunakan "git branch --track" alih-alih "git checkout -b" seperti yang ditentukan.

git branch --track newLocalBranch remoteName/remoteBranch
Anghel Contiu
sumber
Jika Anda checkout -bmenggunakan cabang jarak jauh sebagai titik awal, maka sebenarnya tidak perlu untuk kemudian digunakan --track.
5
Juga, sebagaimana ditunjukkan dalam komentar ini , jika Anda baru saja melakukannya git checkout <branchname>, dan ada cabang jarak jauh dengan nama yang sama (setelah Anda melakukan git fetch), maka cabang lokal akan secara otomatis diatur untuk melacak yang jarak jauh.
9

Ketika cabang bukan cabang jarak jauh, Anda bisa mendorong cabang lokal Anda langsung ke jarak jauh.

git checkout master
git push origin master

atau ketika Anda memiliki cabang dev

git checkout dev
git push origin dev

atau ketika cabang jarak jauh ada

git branch dev -t origin/dev

Ada beberapa posibilites lain untuk mendorong cabang jauh.

René Höhle
sumber
Kemudian Anda mengambil opsi ketiga. Ketika cabang jarak jauh ada, Anda dapat membuat cabang lokal dan melacak cabang jarak jauh :) sama dengan versi dari max tetapi lebih pendek.
René Höhle