pengembangan-web-mp-pd.com

Ambil cabang jarak jauh

Kolega saya dan saya sedang mengerjakan repositori yang sama dengan yang kami cabut menjadi dua cabang masing-masing secara teknis untuk proyek yang berbeda, tetapi mereka memiliki kesamaan sehingga kami kadang-kadang ingin melakukan komitmen kembali ke * master dari branch.

Namun, saya memiliki branch. Pertanyaan saya adalah, bagaimana rekan saya bisa menarik cabang itu secara khusus?

Sebuah git clone dari repo tampaknya tidak membuat cabang secara lokal untuknya, meskipun saya bisa melihat mereka hidup tanpa kesulitan setelah Push di ujung saya.

Juga, ketika saya awalnya membuat cabang saya lakukan -b checkout. Tidak yakin apakah itu membuat banyak perbedaan?

$ git branch -r
Origin/HEAD -> Origin/master
Origin/daves_branch
Origin/discover
Origin/master

$ git fetch Origin discover
$ git checkout discover

Ini adalah perintah yang saya jalankan. Tapi itu pasti tidak berhasil.

Saya ingin dapat memeriksa cabang itu dan kemudian Tekan dan lakukan kembali hanya perubahan cabang dari berbagai kolaborator atau workstation .

1876
David

Anda perlu membuat cabang lokal yang melacak cabang jarak jauh. Perintah berikut akan membuat cabang lokal bernama daves_branch , melacak cabang jarak jauh Origin/daves_branch . Ketika Anda Mendorong perubahan Anda, cabang jarak jauh akan diperbarui.

Untuk versi git terbaru:

git checkout --track Origin/daves_branch

--track adalah singkatan untuk git checkout -b [branch] [remotename]/[branch] di mana [remotename] adalah Origin dalam kasus ini dan [branch] dua kali sama, daves_branch dalam kasus ini.

Untuk git 1.5.6.5 Anda membutuhkan ini:

git checkout --track -b daves_branch Origin/daves_branch

Untuk git 1.7.2.3 dan lebih tinggi ini sudah cukup (mungkin sudah dimulai sebelumnya tetapi ini adalah konfirmasi paling awal yang bisa saya temukan dengan cepat):

git checkout daves_branch

Perhatikan bahwa dengan versi git terbaru, perintah ini tidak akan membuat cabang lokal dan akan menempatkan Anda dalam keadaan 'HEAD terlepas'. Jika Anda menginginkan cabang lokal, gunakan opsi --track. Detail lengkapnya di sini: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches

2569
ralphtheninja

Saya telah menggunakan fetch diikuti oleh checkout ...

git fetch <remote> <rbranch>:<lbranch> 
git checkout <lbranch>

... di mana <rbranch> adalah cabang jarak jauh atau sumber ref dan <lbranch> adalah yang belum tidak ada cabang lokal atau tujuan ref Anda ingin melacak dan yang Anda mungkin ingin nama yang sama dengan cabang jarak jauh atau sumber referensi. Ini dijelaskan di bawah opsi dalam penjelasan <refspec>.

Git sangat cerdas sehingga otomatis menyelesaikan perintah pertama jika saya tab setelah beberapa huruf pertama dari cabang jauh. IE: Saya bahkan tidak perlu menamai cabang lokal, Git secara otomatis menyalin nama cabang jarak jauh untuk saya. Terima kasih git!

Juga sebagai jawabannya di SO post show yang serupa ini, jika Anda tidak memberi nama cabang lokal di fetch, Anda masih dapat membuatnya ketika Anda memeriksanya dengan menggunakan -b flag. IE:git fetch <remote> <branch> diikuti oleh git checkout -b <branch> <remote>/<branch> melakukan persis sama dengan jawaban awal saya. Dan ternyata jika repo Anda memiliki hanya satujarak jauh, maka Anda bisa melakukan git checkout <branch> setelah fetch dan itu akan membuat lokal cabang untuk Anda. EG: Anda baru saja mengkloning repo dan ingin memeriksa cabang tambahan dari jarak jauh.

Saya percaya bahwa beberapa dokumentasi untuk fetch mungkin telah disalin kata demi kata dari pull . Khususnya bagian pada <refspec> di opsi adalah sama. Namun, saya tidak percaya bahwa fetch akan pernah merge , sehingga jika Anda membiarkan sisi tujuan dari titik dua kosong fetch tidak melakukan apa-apa .

CATATAN: git fetch <remote> <refspec> itu adalah kependekan dari git fetch <remote> <refspec>: yang karenanya tidak akan melakukan apa-apa, tetapi git fetch <remote> <tag> sama dengan git fetch <remote> <tag>:<tag> yang harus menyalin <tag> jarak jauh secara lokal.

Saya kira ini hanya membantu jika Anda ingin menyalin cabang jarak jauh secara lokal, tetapi tidak harus langsung memeriksanya. Kalau tidak, saya sekarang akan menggunakan jawaban yang diterima di atas , yang dijelaskan secara rinci di bagian pertama dari deskripsi checkout dan kemudian di opsi bagian di bawah penjelasan --track, karena itu adalah 1-liner. Yah ... semacam 1-liner, karena Anda akan masih harus menjalankan git fetch <remote> terlebih dahulu.

FYI: Urutan <refspecs>sumber: tujuan) menjelaskan metode pre Git-1.7 yang aneh untuk _ (menghapus cabang jarak jauh . IE: Dorong apa pun ke refspec tujuan.

836
Mark Mikofski

Jika Anda mencoba "checkout" cabang jarak jauh baru (yang hanya ada di jarak jauh, tetapi tidak secara lokal), inilah yang Anda perlukan:

git fetch Origin
git checkout --track Origin/<remote_branch_name>

Ini mengasumsikan Anda ingin mengambil dari Asal . Jika tidak, ganti Asal dengan remote nama Anda.

319
paneer_tikka

Untuk checkout myBranch yang ada dari jarak jauh dan bukan lokal - Ini berfungsi untuk saya:

git fetch --all
git checkout myBranch

Saya mendapat pesan ini:

Branch myBranch set up to track remote branch myBranch from Origin
Switched to a new branch 'myBranch'
101
David

Gunakan git branch -a (cabang lokal dan jarak jauh) atau git branch -r (hanya cabang terpencil) untuk melihat semua remote dan cabangnya. Anda kemudian dapat melakukan git checkout -t remotes/repo/branch ke remote dan membuat cabang lokal.

Ada juga perintah git ls-remote untuk melihat semua referensi dan tag untuk remote tersebut.

45
Daniel Lee

Judul dan pertanyaannya membingungkan:

  • Git ambil cabang jarak jauh
  • bagaimana rekan saya bisa menarik cabang itu secara khusus.

Jika pertanyaannya adalah bagaimana saya bisa mendapatkan cabang jarak jauh untuk bekerja atau bagaimana cara checkout cabang jauh, solusi yang lebih sederhana adalah:

Dengan git (> = 1.6.6) Anda dapat menggunakan:

git checkout <branch_name>

Jika <branch_name> lokal tidak ditemukan tetapi ada cabang pelacakan di persis satu remote dengan nama yang cocok, perlakukan setara dengan:

git checkout -b <branch_name> --track <remote>/<branch_name>

lihat dokumentasi untuk checkout git

Untuk temanmu:

$ git checkout discover
Branch discover set up to track remote branch discover
Switched to a new branch 'discover'
36
git checkout -b serverfix Origin/serverfix

Ini adalah operasi yang cukup umum sehingga git menyediakan --track steno:

git checkout --track Origin/serverfix

Faktanya, ini sangat umum sehingga bahkan ada jalan pintas untuk jalan pintas itu. Jika nama cabang yang Anda coba checkout (a) tidak ada dan (b) persis cocok dengan nama hanya pada satu jarak jauh, Git akan membuat cabang pelacakan untuk Anda:

git checkout serverfix

Untuk mengatur cabang lokal dengan nama yang berbeda dari cabang jarak jauh, Anda dapat dengan mudah menggunakan versi pertama dengan nama cabang lokal yang berbeda:

git checkout -b sf Origin/serverfix

Sekarang, cabang lokal Anda sf akan secara otomatis menarik dari Origin/serverfix.

Sumber: Pro Git 2nd Edition, yang ditulis oleh Scott Chacon dan Ben Straub (dipotong untuk dibaca)

27
ManuelSchneid3r

Dengan perintah sederhana ini:

git checkout -b 'your_branch' Origin/'remote branch'
20
Karthik damodara

Cara termudah untuk melakukannya, setidaknya untuk saya:

git fetch Origin <branchName>
13
James Rochabrun

Anda dapat mengambil dan checkout cabang jarak jauh dalam satu kesempatan juga: -

git fetch && git checkout the-branch-name
13
Kumar Sambhav
git fetch

git branch -r

git checkout <branch_name>
13
John Rodriguez

Saya mengetik

git checkout <branch_name>

dan mendapatkan

Branch <branch_name> set up to track remote branch <branch_name> from Origin.
Switched to a new branch '<branch_name>'
11

Yang membantu saya adalah

1) Untuk melihat semua cabang jarak jauh yang tersedia (mis. 'Remote-branch-name')

git branch -r

2) Buat cabang lokal menggunakan nama cabang jarak jauh

git fetch && git checkout 'remote-branch-name'
10
Arlan T

Kadang-kadang Anda diminta untuk tidak bermain-main dengan cabang master dan hanya bekerja cabang terpencil (seperti yang diminta). Jadi yang Anda butuhkan adalah cabang jarak jauh.

Jadi untuk mengkloning cabang jarak jauh sendirian (tanpa master), lakukan ini

git clone url --branch remote_branch_name

di mana, remote_branch_name adalah nama cabang jarak jauh

Sebagai contoh,

git clone git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git --branch v3.15

Ini akan memastikan bahwa Anda mengkloning cabang jarak jauh ke cabang lokal Anda dengan nama cabang jarak jauh.

Sekarang jika Anda mengkomit dan Push, kode itu akan dikirimkan ke cabang itu saja.

9
ganezdragon

git fetch --all & git checkout <branch name>

7
Jerome Anthony

Katakanlah remote Anda adalah [email protected] dan Anda ingin cabangnya random_branch. Prosesnya harus sebagai berikut:

  1. Pertama periksa daftar remote Anda dengan

    git remote -v

  2. Jika Anda tidak memiliki remote [email protected] di output perintah di atas, Anda akan menambahkannya dengan

    git remote add xyz [email protected]

  3. Sekarang Anda dapat mengambil konten dari remote itu dengan

    git fetch xyz

  4. Sekarang checkout cabang dari remote itu dengan

    git checkout -b my_copy_random_branch xyz/random_branch

  5. Periksa daftar cabang dengan

    git branch -a

Cabang lokal my_copy_random_branch akan melacak cabang random_branch dari remote Anda.

6
zafar142003

git fetch && git checkout <your friend's branch name> harus melakukan trik

5
tambakoo

Saya ingin memberi Anda perintah oneliner untuk mengambil semua cabang jarak jauh ke lokal Anda dan beralih ke cabang lokal yang baru Anda buat:

git fetch && git checkout discover

setelah menjalankan perintah di atas Anda akan mendapatkan pesan di bawah ini:

Switched to a new branch 'discover'
Branch discover set up to track remote branch discover from Origin.

baris pertama menyatakan bahwa Beralih ke Cabang baru - mengapa baru? sudah ada di remote !.

Tetapi sebenarnya Anda harus membuatnya secara lokal juga, cabang diambil dari indeks jarak jauh dan dibuat secara lokal untuk Anda.

Di sini discover adalah cabang baru yang dibuat dari cabang jauh repositori Anda discover.

Tetapi baris kedua memberikan lebih banyak informasi daripada baris pertama yang memberi tahu kita bahwa:

cabang kami diatur untuk melacak cabang jarak jauh dengan nama yang sama.

Meskipun git fetch mengambil semua cabang ke lokal Tetapi jika Anda menjalankan git branch setelahnya, Anda hanya akan melihat master cabang di lokal why ?

karena untuk setiap cabang yang Anda miliki di remote Anda harus membuatnya secara lokal juga, untuk melacaknya sebagai git checkout <branchname> seperti yang telah kami lakukan dalam contoh di atas.

setelah menjalankan perintah git checkout Anda dapat menjalankan git branch sekarang Anda dapat melihat kedua cabang:

  1. master dan 2. temukan di daftar lokal Anda.
3
Haritsinh Gohil

Langkah-langkahnya adalah sebagai berikut;

  1. git fetch Origin atau git fetch --all, ini akan mengambil semua cabang jarak jauh ke lokal Anda dan kemudian ini opsi kedua yang dapat Anda proses.

  2. git checkout --track Origin/<The_remote_branch you want to switch over>

Kemudian kerjakan cabang ini dan Anda dapat memverifikasi apakah Anda berada di cabang itu atau tidak dengan mengetik

git branch

Ini menampilkan cabang Anda saat ini.

3
Sam

coba saja

$ git pull Origin your_branch_name

3
Rizo

Jika Anda sudah tahu cabang jarak jauh Anda seperti itu ...

git remote
=> One
=> Two

dan Anda tahu nama cabang yang Anda ingin checkout ex. br1.2.3.4 lalu lakukan

git fetch One
=> returns all meta data of remote i.e. the branch name in question.

yang tersisa hanyalah checkout cabang

git checkout br.1.2.3.4

Kemudian buat cabang baru dari situ.

3
SoEzPz

Periksa .git/config Anda, khususnya pelacakan apa yang ada di fetch untuk remote itu.

[remote "randomRemote"]
    url = [email protected]:someUser/someRepo.git
    fetch = +refs/heads/*:refs/remotes/randomRemote/*

Jika heads/* menunjuk ke randomRemote/*, saat Anda menjalankan git fetch randomRemote, ia akan mengambil semua cabang. Maka Anda bisa checkout cabang itu.

Jika tidak,

  1. Anda perlu menambahkan cabang jauh ke pelacakan menggunakan ini. Periksa .git/config Anda setelah menjalankan ini. Kamu akan mengerti. git set-cabang jarak jauh --add randomRemote randomBranch

  2. Jalankan git fetch randomRemote. Ini akan mengambil cabang jarak jauh.

  3. Sekarang Anda dapat menjalankan git checkout randomBranch

2
Vamshi Suram

Jika Anda memiliki repositori yang diklon dengan --depth 1 maka banyak dari perintah yang terdaftar tidak akan berfungsi. Misalnya lihat di sini

% git clone --depth 1 https://github.com/repo/code
Cloning into 'code'...
cd code
remote: Counting objects: 1778, done.
remote: Compressing objects: 100% (1105/1105), done.
remote: Total 1778 (delta 87), reused 1390 (delta 58), pack-reused 0
Receiving objects: 100% (1778/1778), 5.54 MiB | 4.33 MiB/s, done.
Resolving deltas: 100% (87/87), done.
Checking connectivity... done.
Checking out files: 100% (1215/1215), done.
% cd code
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
% git fetch Origin other_branch
remote: Counting objects: 47289, done.
remote: Compressing objects: 100% (15906/15906), done.
remote: Total 47289 (delta 30151), reused 46699 (delta 29570), pack-reused 0
Receiving objects: 100% (47289/47289), 31.03 MiB | 5.70 MiB/s, done.
Resolving deltas: 100% (30151/30151), completed with 362 local objects.
From https://github.com/repo/code
 * branch            other_branch-> FETCH_HEAD
% git checkout other_branch
error: pathspec 'other_branch' did not match any file(s) known to git.
%

Dalam hal ini saya akan membatalkan repo, tetapi mungkin ada teknik lain mis. git clon dangkal (clone --depth) merindukan cabang terpencil

2
Colin D

Untuk mengambil cabang yang ada di remote, cara paling sederhana adalah:

git checkout branchName

Ini akan mengambil cabang jarak jauh ke lokal Anda dan secara otomatis akan melacak cabang jarak jauh.

2
Harshit Agarwal

git branch <name> --track Origin/<name>

1
Chris F Carroll

Anda menggunakan 'git pull' untuk menjaga cabang Anda terpisah. Saya akan menggunakan nama repo dan cabang yang sebenarnya untuk membantu karena 'lbranch' dan 'rbranch' sulit untuk diuraikan.

Mari kita gunakan:

  • myteam.unfuddle.com = server git jarak jauh
    • tlc = urungkan akun proyek di mana repo ada
    • daves_branch = nama cabang jarak jauh

      Anda, atau kolega mana pun, dapat menjalankan ini hanya untuk menarik cabang Anda, tidak peduli berapa banyak cabang yang ada:

       git init 
       git pull [email protected]: myteam/tlc daves_branch: refs/remote/Asal/daves_branch 
      
  • 1
    Andrew

    Perintah sederhana - "git checkout remote_branch_name" akan membantu Anda membuat cabang lokal yang memiliki semua perubahan di cabang jauh.

    0
    SjK