Pertanyaan Git ambil cabang jarak jauh


Rekan saya dan saya bekerja di repositori yang sama, kami telah membaginya menjadi dua cabang masing-masing secara teknis untuk proyek yang berbeda, tetapi mereka memiliki kesamaan sehingga kadang-kadang kami ingin kembali ke * master dari cabang.

Namun, saya memiliki cabang. Pertanyaan saya adalah, bagaimana rekan saya dapat menarik cabang itu secara khusus? SEBUAH git clone repo tampaknya tidak membuat cabang lokal untuknya, meskipun saya dapat melihat mereka hidup tanpa gangguan setelah dorongan pada akhir saya.

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

iMac:test_solar dave$ 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 jelas tidak berfungsi. Saya ingin dapat memeriksa cabang itu dan kemudian mendorong dan melakukan kembali hanya perubahan cabang dari berbagai kolaborator atau workstation.


1597
2018-03-02 17:06


asal


Jawaban:


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

Untuk sebagian besar versi git:

git checkout --track origin/daves_branch

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

Untuk git 1.5.6.5 Anda memerlukan 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 dapat 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 status 'terpisah HEAD'. Jika Anda menginginkan cabang lokal, gunakan --track pilihan. Detail lengkapnya di sini: http://git-scm.com/book/en/v2/Git-Branching-Remote-Branches#Tracking-Branches


2215
2018-03-02 17:45



Saya telah menggunakan fetch diikuti oleh checkout ...

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

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

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

Juga sebagai jawaban dalam posting SO serupa ini menunjukkan, jika Anda tidak menyebutkan cabang lokal di fetch, Anda masih dapat membuatnya saat Anda memeriksanya dengan menggunakan -b bendera. YAITU:  git fetch <remote> <branch> diikuti oleh git checkout -b <branch> <remote>/<branch> tidak persis sama dengan jawaban awal saya. Dan ternyata jika repo Anda punya hanya satu jauh, maka Anda bisa melakukannya git checkout <branch> setelah fetch dan itu akan membuat cabang lokal untuk Anda. MISALNYA: Anda baru saja mengkloning repo dan ingin memeriksa cabang tambahan dari remote.

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

CATATAN: Itu git fetch <remote> <refspec> 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 remote <tag> secara lokal.

Saya kira ini hanya berguna jika Anda ingin menyalin cabang jarak jauh secara lokal, tetapi tidak perlu segera memeriksanya. Kalau tidak, saya sekarang akan menggunakannya jawaban yang diterima di atas, yang dijelaskan secara rinci di bagian pertama deskripsi checkout dan kemudian di pilihan bagian di bawah penjelasan --track, karena ini adalah 1-liner. Baik... semacam 1-liner, karena Anda akan melakukannya masih harus berlari git fetch <remote> pertama.

FYI: Urutan dari <refspecs> (sumber: tujuan) menjelaskan metode pra Git-1.7 yang ganjil untuk menghapus cabang jarak jauh. IE: Tidak ada push ke refspec tujuan.


740
2018-04-19 00:45



Jika Anda mencoba "checkout" cabang jarak jauh baru (yang hanya ada di remote, 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 oleh Anda terpencil nama.


270
2018-05-17 12:14



Untuk checkout myBranch yang ada dari jarak jauh dan bukan lokal - Ini bekerja 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'

88
2017-11-12 03:36



Menggunakan git branch -a (baik cabang lokal maupun cabang jarak jauh) atau git branch -r (hanya cabang jarak jauh) 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.


37
2018-03-02 17:16



Judul dan pertanyaannya membingungkan:

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

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

Dengan git (> = 1.6.6) Anda dapat menggunakan:

git checkout <branch_name>

Jika lokal <branch_name> tidak ditemukan tetapi memang ada cabang pelacakan dalam satu remote dengan nama yang cocok, memperlakukan sama 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'

33
2018-03-31 10:48



git checkout -b serverfix origin/serverfix

Ini adalah operasi yang cukup umum yang memberikan git -ron cepat:

git checkout --track origin/serverfix

Sebenarnya, ini sangat umum sehingga bahkan ada pintasan untuk pintasan itu. Jika nama cabang yang Anda coba untuk checkout (a) tidak ada dan (b) sama persis dengan nama di hanya satu remote, Git akan membuat cabang pelacakan untuk Anda:

git checkout serverfix

Untuk menyiapkan 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 asal / perbaikan server.

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


24
2018-03-18 00:21