Gabungkan git repo menjadi cabang dari repo lain

122

Diberikan repo Foo dan repo Bar. Saya ingin menggabungkan Bar dengan Foo, tetapi hanya menjadi cabang terpisah, bernama baz.

git checkout -b baz <= letakkan repo Bar di sini.

Milktrader
sumber

Jawaban:

231

Anda tidak dapat menggabungkan repositori menjadi cabang . Anda dapat menggabungkan cabang dari repositori lain menjadi cabang di repositori lokal Anda. Dengan asumsi Anda memiliki dua repositori, foodan barkeduanya terletak di direktori Anda saat ini:

$ ls
foo bar

Ubah ke dalam foorepositori:

$ cd foo

Tambahkan barrepositori sebagai remote dan ambil:

$ git remote add bar ../bar
$ git remote update

Buat cabang baru bazdi foorepositori berdasarkan apa pun cabang Anda saat ini:

$ git checkout -b baz

Gabungkan cabang somebranchdari barrepositori ke cabang saat ini:

$ git merge --allow-unrelated-histories bar/somebranch

( --allow-unrelated-historiestidak diperlukan sebelum git versi 2.9)

larsks
sumber
21
karena git 2.9 Anda mungkin perlu menambahkan --allow-unrelated-historiesperintah git merge.
Drasill
2
Info tentang komentar dari @Drasill: github.com/git/git/blob/master/Documentation/RelNotes/…
GaTechThomas
10
Saya tidak tahu apa yang saya lakukan dan saya tidak bisa membaca ini dengan placeholder foo / bar. Adakah yang bisa mengedit ini dengan contoh kehidupan nyata yang sebenarnya (seperti tautan jika sesuai dan semacamnya)?
rien333
Ooh, ini bagus. Saya lebih suka menggabungkannya menjadi subdirektori. Tidak mungkin jauh berbeda, bukan? Saya lebih suka langkah itu ditambahkan.
macetw
1
Saya mendapatkan banyak konflik gabungan. Pokoknya Anda bisa memaksa bergabung menjadi cabang baru?
nomadoda
41

Diperbarui dengan perintah "kehidupan nyata":

Mulailah dari direktori repo Anda, pastikan copy pekerjaan Anda bersih (tidak ada file yang diubah, ditambahkan atau dihapus).


Buat cabang baru:

git checkout -b <my-branch>

Tambahkan remote sekunder, lalu ambil:

git remote add <repo-name> [email protected]:xxx/<repo-name>.git
git remote update

Gabungkan salah satu cabangnya di cabang Anda saat ini:

git merge <repo-name>/<their-branch>


Jika Anda tidak tahu mana yang <their-branch>Anda inginkan, pergilahmaster

Jika Anda yakin ingin menerima semua perubahan jarak jauh dan menghindari konflik ( menimpa milik Anda ) maka Anda dapat menentukan -X theirsopsi untuk git mergedi langkah terakhir.

Jika Anda ingin menambahkannya di subdirektori, Anda mungkin harus menggunakan submodul git

vinzdef
sumber
3

Dengan menggunakan panduan dari Larsks, saya dapat melakukan ini menggunakan SourceTree.

  1. Membuat cabang di repositori tujuan
  2. Menambahkan repositori sumber sebagai remote, dengan menekan tombol Pengaturan dan menambahkan repositori sumber.
  3. Cabang dari kedua repositori sekarang ditampilkan di daftar cabang. Saya menggunakan alat gabungan untuk menggabungkan cabang dari repositori sumber ke cabang repositori tujuan baru saya.
  4. Menyelesaikan semua konflik menggunakan SourceTree atau IDE saya
  5. Lakukan perubahan di cabang saya.
  6. Hapus repositori sumber dari daftar jarak jauh, dengan menggunakan tombol Pengaturan.
TheBigSot
sumber