Git: Gabungkan cabang Remote secara lokal

204

Saya telah menarik semua cabang jarak jauh melalui git fetch --all. Saya dapat melihat cabang yang ingin saya gabungkan git branch -asebagai remote / origin / branchname. Masalahnya adalah tidak dapat diakses. Saya tidak dapat menggabungkan atau checkout?

micahblu
sumber

Jawaban:

321

Anda dapat merujuk cabang-cabang pelacakan jarak jauh ~ (terdaftar dengan git branch -r) dengan nama jarak jauh mereka.

Anda perlu mengambil cabang jarak jauh:

git fetch origin aRemoteBranch

Jika Anda ingin menggabungkan salah satu cabang jarak jauh di cabang lokal Anda:

git checkout master
git merge origin/aRemoteBranch

Catatan 1: Untuk repo besar dengan riwayat panjang, Anda akan ingin menambahkan --depth=1opsi saat Anda menggunakannya git fetch.

Catatan 2: Perintah-perintah ini juga bekerja dengan repo jarak jauh lain sehingga Anda dapat mengatur origindan upstreamjika Anda sedang mengerjakan garpu.


Skenario yang berlawanan: Jika Anda ingin menggabungkan salah satu cabang lokal Anda pada cabang jarak jauh (berbeda dengan cabang jarak jauh ke cabang lokal, seperti yang ditunjukkan di atas), Anda perlu membuat cabang lokal baru di atas cabang jarak jauh yang disebutkan terlebih dahulu:

git checkout -b myBranch origin/aBranch
git merge anotherLocalBranch

Idenya di sini, adalah untuk menggabungkan "salah satu cabang lokal Anda" (di sini anotherLocalBranch) ke cabang jauh ( origin/aBranch).
Untuk itu, Anda buat " myBranch" pertama sebagai mewakili cabang jarak jauh itu: itulah git checkout -b myBranch origin/aBranchbagiannya.
Dan kemudian Anda bisa bergabung anotherLocalBranchdengannya myBranch.

VONC
sumber
aLocalBranch? apakah itu salah cetak? Saya kira Anda bermaksud menulis "myBranch" lagi?
knocte
1
@knocte No: "Jika Anda ingin menggabungkan salah satu cabang lokal Anda di salah satu cabang terpencil itu": Saya menggabungkan " aLocalBranch" menjadi " myBranch", dengan " myBranch" mewakili cabang jarak jauh origin/aBranch.
VonC
Maaf mengganggu Anda @VonC, dalam komentar Anda sebelumnya, Anda mengatakan aLocalBranchitu bukan kesalahan ketik, tetapi Anda menyetujui suntingan terakhir (2 tahun kemudian!) Yang mengoreksi "kemungkinan kesalahan ketik" ini. Saya ingin memeriksa dengan Anda sebelum membatalkan pengeditan.
rath
1
@ kemarahan Anda benar: tampaknya saya mungkin telah memeriksa suntingan itu sedikit terburu-buru, berbatasan dengan kecerobohan. Saya memang mengedit jawaban untuk mengklarifikasi kasus penggabungan kedua: dapatkah Anda memberi tahu saya jika ini lebih jelas sekarang?
VonC
91

Setiap kali saya melakukan penggabungan, saya masuk ke cabang yang ingin saya gabungkan (misalnya " git checkout branch-i-am-working-in") dan kemudian lakukan hal berikut:

git merge origin/branch-i-want-to-merge-from

Michael Dautermann
sumber
2
Saya kira Anda harus melakukan yang git fetch origin/branch-i-want-to-merge-frompertama, bukan?
Hinrich
9
git fetch origin developdiikuti olehgit merge origin/develop
Olivier
2
@ Olivier Anda benar, ini adalah cara yang tepat untuk melakukannya. git merge sendirian tidak akan melakukannya.
Sam
1
terima kasih atas konvensi penamaan yang cerdas yang membantu saya memahami
tony2tones
1
@Akira Bukankah git add .-> git commit -m <message>-> git push -u origin <branch>?
Cloud Cho
24

Ambil cabang jarak jauh dari asal terlebih dahulu.

git fetch origin remote_branch_name

Gabungkan cabang jarak jauh ke cabang lokal

git merge origin/remote_branch_name
Lanil Marasinghe
sumber
1
Ini bekerja untuk saya ketika jawaban yang diterima melaporkan Bukan sesuatu yang bisa kita gabungkan. Dalam kasus saya, saya menggabungkan dari garpu repo pengguna saya di GitHub.
SJT
Apakah perintah pertama yang diambil diperlukan? Apakah 'git merge origin / remote_branch_name' membaca dari cabang jarak jauh, bukan lokal. Jadi saya tidak peduli, apakah cabang lokal diperbarui atau tidak?
Michael Freidgeim
20

Mungkin Anda ingin melacak cabang jarak jauh dengan cabang lokal:

  1. Buat cabang lokal baru: git branch new-local-branch
  2. Atur cabang yang baru dibuat ini untuk melacak cabang jarak jauh: git branch --set-upstream-to=origin/remote-branch new-local-branch
  3. Masuk ke cabang ini: git checkout new-local-branch
  4. Tarik semua konten cabang jauh ke cabang lokal: git pull
e18r
sumber
3

Jika Anda sudah mengambil cabang jarak jauh dan melakukannya git branch -a,
Anda mendapatkan sesuatu seperti:

* 8.0
  xxx
  remotes/origin/xxx
  remotes/origin/8.0
  remotes/origin/HEAD -> origin/8.0
  remotes/rep_mirror/8.0

Setelah itu, Anda dapat menggunakan rep_mirror/8.0untuk menunjuk secara lokal cabang jauh Anda.

Kuncinya adalah itu remotes/rep_mirror/8.0tidak berhasil tetapi rep_mirror/8.0tidak.

Jadi, perintah seperti git merge -m "my msg" rep_mirror/8.0do the merge.

(catatan: ini adalah komentar untuk jawaban @VonC. Saya meletakkannya sebagai jawaban lain karena blok kode tidak cocok dengan format komentar)

herve-guerin
sumber