Bagaimana cara mengunduh cabang dengan git?


214

Saya memiliki proyek yang dihosting di GitHub. Saya membuat cabang di satu komputer, lalu mendorong perubahan saya ke GitHub dengan:

git push origin branch-name

Sekarang saya di komputer yang berbeda, dan saya ingin mengunduh cabang itu. Jadi saya mencoba:

git pull origin branch-name

... tetapi semua ini dilakukan adalah menimpa cabang master saya dengan perubahan di cabang baru saya.

Apa yang harus saya lakukan untuk menarik cabang jarak jauh dengan benar, tanpa menimpa cabang yang ada?

Jawaban:


377

Berkat pertanyaan terkait , saya mengetahui bahwa saya perlu "checkout" cabang jarak jauh sebagai cabang lokal baru, dan menentukan nama cabang lokal baru.

git checkout -b newlocalbranchname origin/branch-name

Atau Anda dapat melakukannya:

git checkout -t origin/branch-name

Yang terakhir akan membuat cabang yang juga diatur untuk melacak cabang jarak jauh.


Pembaruan: Sudah 5 tahun sejak saya memposting pertanyaan ini. Saya telah belajar banyak dan git telah meningkat sejak saat itu. Alur kerja saya yang biasa sedikit berbeda sekarang.

Jika saya ingin mengambil cabang jarak jauh, saya hanya menjalankan:

git pull

Ini akan mengambil semua cabang jarak jauh dan menggabungkan cabang saat ini. Ini akan menampilkan output yang terlihat seperti ini:

From github.com:andrewhavens/example-project
   dbd07ad..4316d29  master     -> origin/master
 * [new branch]      production -> origin/production
 * [new branch]      my-bugfix-branch -> origin/my-bugfix-branch
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 4316d296c55ac2e13992a22161fc327944bcf5b8.

Sekarang git tahu tentang yang baru my-bugfix-branch. Untuk beralih ke cabang ini, saya cukup menjalankan:

git checkout my-bugfix-branch

Biasanya, saya perlu membuat cabang sebelum saya bisa memeriksanya, tetapi dalam versi git yang lebih baru, cukup cerdas untuk mengetahui bahwa Anda ingin checkout salinan lokal dari cabang jarak jauh ini.


Saya menggunakan GIT 1.7.2.5, dan perintah yang bekerja untuk saya adalah: git branch --track XX origin/XX. Perintah Anda memberi saya kesalahan.
dimitarvp

8
Jika Anda tidak memiliki semua cabang jarak jauh yang diunduh, ini mungkin gagal. Lakukan "git remote update" untuk menarik mereka ke bawah.
Ben Walding

1
Sebenarnya, itu bisa lebih pendek "git checkout branch-name". Jika nama cabang sama dengan cabang pelacakan jarak jauh (yaitu asal / nama-cabang), maka secara otomatis cabang pelacakan lokal.
DavidN

64

Untuk pemula Git seperti saya, berikut adalah beberapa langkah yang dapat Anda ikuti untuk mengunduh repositori jarak jauh, dan kemudian beralih ke cabang yang ingin Anda lihat. Mereka mungkin menyalahgunakan Git dalam beberapa cara, tetapi itu berhasil bagi saya! :-)

Kloning repositori yang ingin Anda unduh kode (dalam contoh ini saya telah memilih proyek LRResty di Github):

$ git clone https://github.com/lukeredpath/LRResty.git
$ cd LRResty

Periksa cabang apa yang Anda gunakan pada saat ini (seharusnya cabang utama):

$ git branch    
* master

Lihat cabang yang Anda inginkan, dalam kasus saya ini disebut 'arcified':

 $ git checkout -b arcified origin/arcified
 Branch arcified set up to track remote branch arcified from origin.
 Switched to a new branch 'arcified'

Konfirmasikan Anda sekarang menggunakan cabang yang Anda inginkan:

$ git branch    
* arcified
  master

Jika Anda ingin memperbarui kode lagi nanti, jalankan git pull:

$ git pull
Already up-to-date.

"Mereka mungkin menyalahgunakan Git dengan cara tertentu" - tidak, ini tepat sekali.
Big McLargeHuge

28

Anda bisa menggunakan git remote seperti:

git fetch origin

dan kemudian atur cabang lokal untuk melacak cabang jarak jauh seperti di bawah ini:

git branch --track [local-branch-name] origin/remote-branch-name

Anda sekarang akan memiliki isi cabang github jarak jauh dengan nama cabang lokal.

Anda dapat beralih ke nama cabang lokal itu dan mulai bekerja:

git checkout [local-branch-name]

18

kamu bisa memakai :

git clone <url> --branch <branch>

untuk mengkloning / mengunduh hanya konten cabang.

Ini sangat membantu saya khususnya, karena isi dari cabang saya sama sekali berbeda dari cabang utama (walaupun biasanya tidak demikian halnya). Oleh karena itu, saran yang tercantum oleh orang lain di atas tidak membantu saya dan saya akhirnya mendapatkan salinan master bahkan setelah saya memeriksa cabang dan melakukan git pull.

Perintah ini akan langsung memberi Anda isi cabang. Ini berhasil untuk saya.


1
Ini jawaban terbaik. Sederhana dan efektif.
derek

2
Ini sepertinya tidak berfungsi untuk saya. Dikatakan sudah ada folder dengan nama itu (yang, tentu saja, ada)
Jonathan Tuzman

1
@ Jonathan Tidak akan menambah cabang baru dengan yang sudah ada. Ini hanya dapat digunakan untuk mengkloning salinan baru. Saya tidak mengerti mengapa harus ada folder dengan nama itu jika Anda belum mengkloning repositori. Coba kloning di lokasi yang berbeda.
Markus Tua

Tidak memperbarui proyek yang ada dengan cabang baru
Dazzle

16

Arahkan ke folder di mesin baru Anda yang ingin Anda unduh dari git on git bash.

Gunakan perintah di bawah ini untuk mengunduh kode dari cabang mana pun yang Anda suka

git clone 'git ssh url' -b 'Branch Name'

Ini akan mengunduh kode cabang masing-masing.


9

Git klon dan cd dalam nama repo:

$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git
Cloning into 'iOS-AppleWach'...
$ cd iOS-AppleWach

Beralih ke cabang (halaman GitHub) yang saya inginkan:

$ git checkout -b gh-pages origin/gh-pages
Branch gh-pages set up to track remote branch gh-pages from origin.
Switched to a new branch 'gh-pages'

Dan tarik cabang:

$ git pull
Already up-to-date.

ls:

$ ls
index.html      params.json     stylesheets


0

Anda dapat mencoba

git fetch <remoteName> <branchName>

Misalnya:

git fetch origin MyRemoteBranch

-8

Buat direktori baru, dan lakukan klon sebagai gantinya.

git clone (alamat asal) (nama cabang)


3
Anda tidak dapat mengkloning hanya cabang di Git. Hanya klon repositori lengkap yang bisa dilakukan.
Alan Haggai Alavi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.