Git menarik cabang dari repositori lain?

90

Saya memiliki repositori git lokal yang merupakan tiruan dari repositori di github. Seseorang telah melakukan fork pada repositori dan membuat perubahan di cabang baru pada repositori baru. Saya ingin memindahkan cabang baru ini ke dalam repositori saya (secara lokal untuk mengerjakannya terlebih dahulu sebelum bergabung dengan master).

Saya mencoba membuat cabang baru dan kemudian menarik dari repositori bercabang tetapi mengeluh karena cabang baru adalah salinan dari cabang master serta perubahan file lokal, jadi katanya

error: Your local changes to the following files would be overwritten by merge.

Jadi bagaimana cara menarik cabang di repositori lain ke cabang baru di repositori lokal saya?

Saya harap itu masuk akal. Jika tidak, ini adalah tempat penyimpanan saya: https://github.com/MatthewLM/cbitcoin

Seperti yang Anda lihat, seseorang telah membuat repositori baru dengan cabang "linuxBuild": https://github.com/austonst/cbitcoin/tree/linuxBuild

Saya ingin cabang itu di repositori lokal saya untuk MatthewLM / cbitcoin.

Bagaimana saya bisa melakukan ini?

Matthew Mitchell
sumber

Jawaban:

161

Anda perlu memastikan git statusbahwa tidak ada perubahan yang tidak bertahap di repositori lokal Anda.
Anda dapat melakukan ini dengan terlebih dahulu menyembunyikan perubahan lokal Anda dan daripada menarik cabang itu. Setelah itu Anda dapat menggunakan simpanan Anda.


Jika Anda ingin membuat ulang struktur cabang dari fork di repositori lokal Anda, Anda dapat melakukan hal berikut:

git remote add fork <url of fork>
git fetch fork
git checkout -b fork_branch fork/<branch>

Ini akan membuat cabang lokal fork_branchdengan sejarah yang sama seperti <branch>di garpu, yaitu fork_branchakan bercabang dari mastertempat <branch>Anda di garpu. Selain itu, cabang lokal Anda sekarang akan melacak cabang tersebut di percabangan, sehingga Anda dapat dengan mudah menarik perubahan baru yang dilakukan di percabangan.

Saya rasa Anda masih perlu memastikan sebelumnya bahwa copy pekerjaan Anda tidak berisi perubahan apa pun.

Daniel Hilgarth
sumber
Ok terima kasih. Ini akan bagus jika saya menginginkan perubahan lokal saya dan komit tidak ditemukan di cabang dari percabangan. Tetapi bagaimana jika saya ingin cabang baru persis seperti di repositori garpu? Itu termasuk menghapus komit apa pun dari repositori saya sendiri setelah percabangan terjadi untuk cabang baru ini. Jadi dengan cara itu, seolah-olah cabang itu dibuat di repositori saya sendiri daripada yang bercabang.
Matthew Mitchell
Jawaban Anda adalah solusi yang dapat diterima untuk apa yang perlu saya lakukan, namun saya akan merasa lebih mudah jika saya dapat menarik cabang baru ke dalam repositori. Saya akan menunggu beberapa saat untuk melihat apa yang dikatakan orang lain.
Matthew Mitchell
@MatthewMitchell: Silakan periksa pembaruan. Itukah yang kamu cari?
Daniel Hilgarth
Saya memang menggunakan metode untuk menggabungkannya dengan cabang lain (saya baru saja menggabungkannya dengan master) pada akhirnya, tetapi dalam kasus di mana saya hanya ingin sebuah cabang persis seperti itu dari repositori lain, saya akan mencoba mengambil dan metode pembayaran yang Anda jelaskan. Terima kasih.
Matthew Mitchell
Digunakan untuk memigrasi cabang lain "gh-pages" dari repo lain!
Marcello de Sales
39

Metode tanpa menambahkan remote.

git checkout --orphan fork_branch
git reset --hard
git pull <url of fork> <branch>
Alex78191
sumber
2
Terima kasih untuk ini, saya sudah menandai dan terus kembali ke sana!
Shane Smiskol
2
Jawaban Terbaik untuk tahun 2020
Diamond