Kolega saya dan saya sedang mengerjakan repositori yang sama. Kami telah membuatnya menjadi dua cabang, masing-masing secara teknis untuk proyek yang berbeda, tetapi mereka memiliki kesamaan, jadi kami kadang-kadang ingin berkomitmen kembali ke * master
dari branch
.
Namun, saya punya branch
. Bagaimana rekan saya bisa menarik cabang itu secara khusus?
Salah git clone
satu repositori tampaknya tidak membuat cabang secara lokal untuknya, meskipun saya dapat melihat mereka hidup tanpa kesulitan setelah dorongan di ujung saya.
Juga, ketika saya awalnya membuat cabang, saya lakukan -b checkout
. 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 berfungsi.
Saya ingin dapat memeriksa cabang itu dan kemudian mendorong dan melakukan kembali hanya perubahan cabang dari berbagai kolaborator atau workstation .
sumber
git fetch --all
:, Kemudian untuk melihat semua cabang:,git branch
Lalu saya checkout cabang:git checkout nameofnewbranch
git fetch origin discover:discover && git checkout discover
Jawaban:
Anda perlu membuat cabang lokal yang melacak cabang jarak jauh. Perintah berikut akan membuat cabang lokal bernama daves_branch , melacak asal cabang jarak jauh / daves_branch . Saat Anda mendorong perubahan, cabang jarak jauh akan diperbarui.
Untuk versi terbaru dari Git:
--track
adalah singkatan untukgit checkout -b [branch] [remotename]/[branch]
tempat [remotename] asal dalam kasus ini dan [cabang] dua kali sama, daves_branch dalam kasus ini.Untuk Git 1.5.6.5 Anda membutuhkan ini:
Untuk Git 1.7.2.3 dan lebih tinggi, ini sudah cukup (mungkin sudah dimulai sebelumnya, tapi ini konfirmasi paling awal yang bisa saya temukan dengan cepat):
Perhatikan bahwa dengan versi Git terbaru, perintah ini tidak akan membuat cabang lokal dan akan menempatkan Anda dalam keadaan 'kepala terpisah'. Jika Anda ingin cabang lokal, gunakan
--track
opsi.Detail lengkapnya ada di sini: 3.5 Git Branching - Remote Branches, Tracking Branches
sumber
git checkout -b --track daves_branch origin/daves_branch
Saya telah menggunakan
fetch
diikuti olehcheckout
...... di mana
<rbranch>
adalah remote cabang atau sumber ref dan<lbranch>
adalah belum tidak ada cabang lokal atau tujuan ref Anda ingin melacak dan yang Anda mungkin ingin nama sama dengan cabang terpencil atau sumber ref. 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. Artinya, saya bahkan tidak harus menamai cabang lokal, Git secara otomatis menyalin nama cabang jarak jauh untuk saya. Terima kasih git!
Juga sebagai jawaban dalam posting Stack Overflow serupa ini menunjukkan, jika Anda tidak memberi nama cabang lokal
fetch
, Anda masih bisa membuatnya ketika Anda memeriksanya dengan menggunakan-b
flag. Yaitu,git fetch <remote> <branch>
diikuti dengangit checkout -b <branch> <remote>/<branch>
melakukan persis sama dengan jawaban awal saya. Dan jelas, jika repositori Anda hanya memiliki satu remote, maka Anda bisa melakukannyagit checkout <branch>
setelahnyafetch
dan itu akan membuat cabang lokal untuk Anda. Misalnya, Anda baru saja mengkloning repositori dan ingin memeriksa cabang tambahan dari jarak jauh.Saya percaya bahwa beberapa dokumentasi untuk
fetch
mungkin telah disalin kata demi katapull
. Khususnya bagian tentang<refspec>
di pilihan adalah sama. Namun, saya tidak percaya itufetch
akan pernahmerge
, sehingga jika Anda membiarkan sisi tujuan usus besar kosong,fetch
seharusnya tidak melakukan apa-apa .CATATAN:
git fetch <remote> <refspec>
kependekangit fetch <remote> <refspec>:
yang karenanya tidak akan melakukan apa-apa, tetapigit fetch <remote> <tag>
sama dengangit fetch <remote> <tag>:<tag>
yang harus menyalin remote<tag>
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 , yang dijelaskan secara rinci di bagian pertama dari deskripsi checkout dan kemudian di bagian opsi di bawah penjelasan
--track
, karena ini adalah one-liner. Ya ... semacam one-liner, karena Anda masih harus berlarigit fetch <remote>
dulu.FYI: Urutan
<refspecs>
(sumber: tujuan) menjelaskan metode pre Git 1.7 yang aneh untuk menghapus cabang jarak jauh . Artinya, tidak mendorong apa pun ke refspec tujuan.sumber
git fetch remote branch
sekali tidak menambahkan kepala cabang untuk saya, meskipun semua referensi diambil, jadi ketika saya mencoba mengikuti langkah-langkah dalam jawaban yang diterima, saya mendapatkan kesalahan itupathspec did not match any file(s) known to git.
, tetapirbranch:lbranch
pendekatannya berhasil. Menariknya, itu juga mengambil semua tag yang dimulai dengan awalan yang sama, seperti itu adalah wildcard (rbranch*
).fetch
perintah. Itu jawaban yang diterima masuk akal karena OP mencatat bahwa ia sudah melakukan pengambilan. Setidaknya itulah masalah yang saya hadapi.Jika Anda mencoba "checkout" cabang jarak jauh baru (yang hanya ada di jarak jauh, tetapi tidak secara lokal), inilah yang Anda perlukan:
Ini mengasumsikan Anda ingin mengambil dari asal . Jika tidak, ganti asal dengan nama jarak jauh Anda .
sumber
git fetch
dangit fetch remote
akan melakukan hal yang sama. Jika Anda perlu mengambil dari jarak jauh selainorigin
, Anda bisa melakukannya menggunakangit fetch <other_remote_name>
. Situasi ini sangat jarang, hanya disebutkan di sini untuk kelengkapan.Untuk checkout myBranch yang ada dari jarak jauh dan bukan lokal - Ini berfungsi untuk saya:
Saya mendapat pesan ini:
sumber
-t
?-t
dan dapatkanYou are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.
karena tidak ada cabang lokal dengan nama yang sama. Saya harus menjalankan kembali dengan-t
memperbaiki.checkout
untuk membuatnya. Terima kasih!--all
tidak pernah merupakan ide yang baik, karena itu akan mengunduh setiap file di setiap cabang. Ini akan membutuhkan lebih banyak waktu dan ruang. Lebih baik untuk lebih spesifik dengan nama cabang dan melakukan seperti iniGunakan
git branch -a
(cabang lokal dan remote) ataugit branch -r
(hanya cabang jarak jauh) untuk melihat semua remote dan cabangnya. Anda kemudian dapat melakukangit 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.
sumber
git checkout remotes/repo/branch
membuat checkout checkout mencari pathspec, bukan repo jarak jauh.Judul dan pertanyaannya membingungkan:
Jika pertanyaannya adalah, bagaimana saya bisa mendapatkan cabang jarak jauh untuk bekerja, atau bagaimana saya bisa checkout cabang jauh?, solusi yang lebih sederhana adalah:
Dengan Git (> = 1.6.6) Anda dapat menggunakan:
Jika lokal
<branch_name>
tidak ditemukan, tetapi ada cabang pelacakan di persis satu remote dengan nama yang cocok, perlakukan sebagai setara dengan:Lihat dokumentasi untuk checkout Git
Untuk temanmu:
sumber
Cara termudah untuk melakukannya, setidaknya untuk saya:
sumber
fetch
perintah ini cabang yang diperlukan akan tersedia di mesin lokal.git checkout -b 'your_branch' origin/'remote branch'
diperlukan untuk checkout cabang ini.Menggunakan:
Ini adalah operasi yang cukup umum sehingga Git menyediakan
--track
steno:Sebenarnya, 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 remote, Git akan membuat cabang pelacakan untuk Anda:
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:
Sekarang, cabang lokal Anda
sf
akan secara otomatis menarikorigin/serverfix
.Sumber: Pro Git, Edisi ke-2 , ditulis oleh Scott Chacon dan Ben Straub (dipotong untuk dibaca)
sumber
Dengan perintah sederhana ini:
sumber
Untuk mengambil cabang yang ada di remote, cara paling sederhana adalah:
Anda dapat melihat apakah sudah ada pada jarak jauh dengan:
Ini akan mengambil cabang jarak jauh ke lokal Anda dan secara otomatis akan melacak cabang jarak jauh.
sumber
Yang membantu saya adalah
1) Untuk melihat semua cabang jarak jauh yang tersedia (mis. 'Remote-branch-name')
2) Buat cabang lokal menggunakan nama cabang jarak jauh
sumber
git push
tanpa argumen lain? Apakah cabang lokal bernamaremote-branch-name
secara otomatis dikaitkan dengan (pelacakan ke) cabang jarak jauh bernamaorigin/remote-branch-name
. Atau apakah Anda perlu menjalankangit push -u origin remote-branch-name
Anda dapat mengambil dan checkout cabang jarak jauh dalam satu kesempatan juga:
sumber
sumber
saya mengetik
dan mendapatkan
sumber
git checkout -b <branch_name> --track <remote>/<branch_name>
Kadang-kadang Anda diminta untuk tidak mengutak-atik cabang master dan hanya bekerja cabang terpencil (seperti yang diminta). Jadi yang Anda butuhkan adalah cabang jarak jauh.
Jadi untuk mengkloning cabang jarak jauh saja (tanpa master), lakukan ini
di mana, remote_branch_name adalah nama cabang jarak jauh
Sebagai contoh,
Ini akan memastikan bahwa Anda mengkloning cabang jarak jauh ke cabang lokal Anda dengan nama cabang jarak jauh.
Sekarang jika Anda mengkomit kode Anda dan mendorong, kode akan dikirimkan ke cabang itu saja.
sumber
[Jawaban cepat]
Ada banyak alternatif, dan favorit saya adalah:
- Alternatif 1:
- Alternatif 2:
sumber
Katakanlah remote Anda adalah [email protected] dan Anda menginginkan cabang random_branch-nya. Prosesnya harus sebagai berikut:
Pertama periksa daftar remote Anda dengan
Jika Anda tidak memiliki remote [email protected] di output perintah di atas, Anda akan menambahkannya dengan
Cabang lokal my_copy_random_branch akan melacak cabang random_branch dari remote Anda.
sumber
git fetch --all & git checkout <branch name>
sumber
git fetch && git checkout <your friend's branch name>
harus melakukan triksumber
Saya ingin memberi Anda perintah satu-liner untuk mengambil semua cabang jarak jauh ke lokal Anda dan beralih ke cabang lokal yang baru Anda buat:
Setelah menjalankan perintah di atas, Anda akan mendapatkan pesan di bawah ini:
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.
Ini
discover
adalah cabang baru yang dibuat dari cabang jarak jauh repositori Andadiscover
.Tetapi baris kedua memberi lebih banyak informasi daripada yang pertama yang memberi tahu kita bahwa:
Cabang kami disetel untuk melacak cabang jarak jauh dengan nama yang sama.
Meskipun
git fetch
mengambil semua cabang ke lokal. Tetapi jika Andagit branch
mengejarnya, Anda hanya akan melihatmaster
cabang di lokal. Mengapa ?Karena untuk setiap cabang yang Anda miliki di remote Anda harus membuatnya secara lokal juga, untuk melacaknya
git checkout <branchname>
seperti yang telah kami lakukan pada contoh di atas.Setelah menjalankan
git checkout
perintah, Anda dapat menjalankangit branch
, dan sekarang Anda dapat melihat kedua cabang:sumber
Jika Anda ingin mengambil semua cabang jarak jauh, ketikkan saja:
sumber
Coba saja:
sumber
Jika Anda memiliki repositori yang diklon dengan
--depth 1
maka banyak perintah yang terdaftar tidak akan berfungsi. Sebagai contoh, lihat di siniDalam hal ini saya akan menutup repositori, tetapi mungkin ada teknik lain misalnya git clone dangkal (clone --depth) merindukan cabang terpencil
sumber
Jika Anda sudah tahu cabang jarak jauh Anda seperti itu ...
dan Anda tahu nama cabang yang ingin Anda checkout, misalnya, br1.2.3.4 , lalu lakukan
Yang tersisa hanyalah checkout cabang
Kemudian buatlah cabang baru darinya.
sumber
Langkah-langkahnya adalah sebagai berikut;
git fetch origin
ataugit fetch --all
, ini akan mengambil semua cabang jarak jauh ke lokal Anda dan kemudian ini opsi kedua yang dapat Anda proses.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
Ini menampilkan cabang Anda saat ini.
sumber
git branch <name> --track origin/<name>
sumber
Periksa
.git/config
file Anda , terutama pelacakan apa yang ada pada pengambilan untuk remote itu.Jika sudah
heads/*
menunjuk kerandomRemote/*
, ketika Anda menjalankangit fetch randomRemote
, itu akan mengambil semua cabang.Maka Anda bisa checkout cabang itu.
Jika tidak,
Anda perlu menambahkan cabang jarak jauh ke pelacakan menggunakan ini. Periksa
.git/config
setelah Anda menjalankan ini. Kamu akan mengerti.Lari
git fetch randomRemote
. Ini akan mengambil cabang jarak jauh.Sekarang kamu bisa lari
git checkout randomBranch
.sumber
Anda menggunakan 'git pull' untuk menjaga cabang Anda terpisah. Saya akan menggunakan repositori dan nama cabang yang sebenarnya untuk membantu karena 'lbranch' dan 'rbranch' sulit untuk diuraikan.
Mari kita gunakan:
Anda, atau kolega mana pun, dapat menjalankan ini hanya untuk menarik cabang Anda, tidak peduli berapa banyak cabang yang ada:
sumber
Perintah sederhana,
git checkout remote_branch_name
akan membantu Anda membuat cabang lokal yang memiliki semua perubahan di cabang jarak jauh.sumber
sumber