Saya punya pohon seperti ini:
(commit 1) - master
\-- (commit 2) - (commit 3) - demo
\-- (commit 4) - (commit 5) - PRO
dan saya harus memindahkan cabang PRO ke master
(commit 1) - master
|-- (commit 2) - (commit 3) - demo
\-- (commit 4) - (commit 5) - PRO
Saya sudah mencoba git rebase master
dari cabang PRO, tetapi tidak ada yang terjadi.
Untuk memperjelas : Saya bekerja di master dan kemudian saya harus membuat demo produk ( git checkout -b demo
dan beberapa komitmen). Kemudian, secara tidak sengaja, saya membuat cabang lain dari demo ( git checkout -b PRO
dan beberapa komit) dan sekarang saya perlu memindahkan cabang PRO untuk menguasai dan membiarkan demo tetap utuh. Pada akhirnya, baik demo maupun PRO akan hang dari master.
Jawaban:
Gunakan
--onto
untuk itu:Mengingat kasus Anda:
Pada dasarnya, Anda mengambil semua komit dari setelah
demo
hinggaPRO
, dan rebase mereka kemaster
komit.sumber
git rebase --onto first-branch second-branch second-branch
tetapi saya tidak mendapatkan sintaksgit rebase --onto first-branch master second-branch
--onto
, dan bagaimana mereka menulis membantu sayagit rebase --onto newBase oldBase feature/branch
origin/newBase
adalah nama cabang, sepertinewBase
dalam contoh saya. Itu hanya akan tergantung jika Anda memunculkan kembali ke cabang yang ada di repositori lokal Anda (newBase
), atau yang ada di remote (origin/newBase
).newBase
adalah nama cabang lokal, danorigin/newBase
nama cabang jarak jauh. Yang mana yang Anda inginkan tergantung pada apa yang Anda inginkan. Bukannya seseorang bekerja dan yang lain tidak, itu karena mereka mengubah hal yang berbeda. Pertanyaan aslinya tidak pernah menyebutkan remote, jadi menggunakan remote pada contoh saya tidak akan cocok dengan pertanyaan yang diajukan.Saya akan mencoba untuk menjadi generik yang saya bisa. Pertama, pastikan Anda berada di cabang yang diinginkan:
Kemudian gunakan perintah berikut (di mana
new-base-branch
cabang yang Anda inginkan menjadi basis baru Anda, dancurrent-base-branch
cabang yang merupakan basis Anda saat ini.)Jika Anda tidak memiliki konflik, maka hebat - Anda selesai. Jika Anda melakukannya (dalam kebanyakan kasus), silakan baca terus.
Konflik mungkin timbul, dan Anda harus menyelesaikannya secara manual. Git sekarang mencoba melakukan "penggabungan 3 arah" antara Anda
current-branch
,current-base-branch
dannew-base-branch
. Secara kasar ini adalah bagaimana git akan bekerja secara internal:Git akan rebase pertama
current-base-branch
di atasnew-base-branch
. Mungkin ada konflik; yang harus Anda selesaikan secara manual. Setelah itu selesai, biasanya Anda lakukangit add .
dangit rebase --continue
. Ini akan membuat komitmen sementara barutemp-commit-hash
untuk ini.Setelah ini, Git sekarang akan rebase Anda
current-branch
di atastemp-commit-hash
. Mungkin ada konflik lebih lanjut dan lagi Anda harus menyelesaikannya secara manual. Setelah selesai, Anda melanjutkan lagi dengangit add .
dangit rebase --continue
, setelah itu Anda berhasil rebased Andacurrent-branch
di atasnew-base-branch
.Catatan: Jika Anda mulai mengacaukan, maka Anda dapat melakukannya
git rebase --abort
kapan saja selama proses rebase dan kembali ke titik awal.sumber
rebase
perintah seperti yang diposting hanya memberi saya "fatal: hulu tidak valid 'saat-base-cabang'". Juga, mengapa bahkan perlu untuk memberi tahu GIT apa cabang induk saat ini dari cabang saat ini - bukankah seharusnya sudah mengetahui hal ini?Checkout ke
PRO
cabang, Salin hash commit tertua dari ( komit4 ) dan terbaru ( komit5 ) dan tempel di tempat lain:Hapus
PRO
cabang (simpan cadangan hanya untuk keselamatan). Buat dan checkout kePRO
cabang baru darimaster
:Ambil ( pilih ceri ) rentang komit dari
PRO
cabang Sebelumnya kePRO
cabang baru :Sekarang, jika semuanya baik-baik saja, maka lakukan paksa (-f) dorong ke
remote PRO
cabang dan hapusPRO.bac
cabang lokal :sumber
Saya memiliki pendekatan yang sedikit berbeda menggunakan reset dan simpanan yang menghindari menghapus dan menciptakan kembali cabang serta menghilangkan kebutuhan untuk beralih cabang:
Dengan mereset cabang pada komit dengan komit, pada dasarnya Anda hanya memutar ulang bahwa cabang mencatat komit pada satu waktu.
sumber