Bagaimana cara memindahkan cabang Git ke repositori sendiri?

180

Saya memiliki cabang yang ingin saya pindahkan ke repositori Git yang terpisah, dan idealnya menyimpan sejarah cabang itu dalam proses. Sejauh ini saya sudah melihat git filter-branch, tetapi saya tidak bisa melihat apakah itu bisa melakukan apa yang ingin saya lakukan.

Bagaimana cara mengekstrak cabang Git ke dalam repositorinya sendiri?

Aupajo
sumber

Jawaban:

281

Anda cukup mendorong cabang ke repositori baru. Semua sejarahnya akan pergi bersamanya. Anda kemudian dapat memilih apakah akan menghapus cabang dari repositori asli.

misalnya

git push url://to/new/repository.git branch-to-move:new-branch-name

Untuk repositori baru, nama cabang baru biasanya master.

Membuat repositori baru yang kosong dapat dilakukan git init.

CB Bailey
sumber
15
Kalau-kalau ada yang bertanya-tanya, saya mengganti URL dengan path ke direktori repositori Git, dan itu berfungsi dengan baik.
Aupajo
48
Anda juga dapat memberi nama nama cabang di repositori baru: git push url://to/new/repository.git branch-to-move:new-branch-name
Yves Van Broekhoven
4
Komentar Yves di atas benar, jika tidak, Anda tidak akan memiliki master di sana dan proses kloning akan berakhir warning: remote HEAD refers to nonexistent ref, unable to checkout.. Jika sudah pada tahap itu, cukup ikut git checkout -b branch-to-movedan Anda aman atau cukup pergi dengan git checkout -b mastermemiliki cabang utama Anda :)
Ain Tohvri
git checkout -b mastermemecahkan masalah saya itu di layar error: src refspec master does not match any.(hanya bertanya-tanya mengapa saya tidak melihat nama cabang saya berada di) Terima kasih
kangkyu
2
Jika jawaban ini membingungkan Anda juga, inilah cara saya memahaminya untuk membuatnya berfungsi: 1) di terminal Anda, berada di direktori yang berisi repo dan cabang yang ingin Anda buat menjadi repo baru; 2) urlharus berupa url git, seperti [email protected]: brianzelip / groceries.git; 3) branch-to-moveadalah cabang dari repo saat ini yang ingin Anda buat menjadi repo baru; 4) new-branch-nameadalah nama yang Anda inginkan untuk cabang baru di repo baru yang dibuat, yaitu: master.
Brian Zelip
19

Ini akan membuat sejarah semua cabang, tetapi membuat salinan Anda menunjuk ke satu cabang khususnya:

git clone -b newbranch CurrentRepo NewRepo

Ini tidak 'memindahkan' apa pun, hanya membuat salinan.

Damon
sumber
2
Perlu dicatat bahwa clone -bitu baru. Itu membutuhkan git> = 1.6.5 (dirilis Oktober 2009).
CB Bailey
Saya kesulitan membuat ini berfungsi, tetapi itu sebelum saya melihat pesan dari Charles Bailey.
Aupajo