Jawaban:
Perbarui ke stiging
cabang dan buat cabang baru darinya. Kemudian tutup cabang lama.
Singkatnya:
hg update stiging
hg branch staging
hg commit -m"Changing stiging branch to staging."
hg update stiging
hg commit --close-branch -m"This was a typo; use staging instead."
hg push --new-branch
--force
. Sebagai contoh: hg branch --force v3
. Ini akan menghasilkan hg update v3
pembaruan ke v3
cabang baru , seperti yang Anda inginkan.
stiging
sebelum bercabang, Anda tidak mendapatkan "ujung yang longgar"
Untuk pembaca yang akan datang: Dengan rebase
ekstensi, Anda dapat membuat cabang baru dengan orang tua yang sama stiging
dan memindahkan seluruh sejarah cabang ke sana, seperti ini:
hg update -r "parents(min(branch('stiging')))"
hg branch staging
hg commit
hg rebase --source "min(branch('stiging'))" --dest staging
Ini mengasumsikan bahwa stiging
hanya memiliki satu orangtua. Tentu saja Anda bisa menggunakan angka revisi eksplisit saja.
Catatan 1: Jika cabang stiging
menyertakan gabungan dengan cabang lain, saya pikir ini akan mempertahankannya, selama staging
dan stiging
memiliki induk yang sama. Tapi aku akan mengeceknya.
Catatan 2: Karena ini mengedit sejarah, cabang lama tidak akan hilang begitu saja dari repositori yang dikloning (lihat rebase
dokumentasi). Kecuali setiap orang dapat mengkloning baru, itu mungkin bukan solusi yang sangat praktis untuk kelompok besar.
Note3 / Edit (milik @JasonRCoombs): Sekarang fase - fase standar dalam mercurial, rebase
akan menolak untuk memodifikasi perubahan yang telah didorong. Entah membodohinya dengan mengubah fase kembali ke draft (with hg phases
), atau membiarkan cabang lama tetap di sana, dan hanya membuat salinan yang dinamai dengan benar (misalnya, dengan `hg rebase --keep ').
hg convert
sebagai gantinya.
--keep
ke perintah rebase, yang akan menyalin alih-alih memindahkan perubahan.
abort: can't rebase immutable changeset 11b1e2b7dc4f
. Perhatikan bahwa saya telah mencangkok perubahan dari cabang lain ke cabang ini. Selain itu, itu terpisah dan bergabung.
.
Anda --dest
dan rebase akan mengambil nama cabang baru secara otomatis.
Jika Anda memiliki set perubahan di dalamnya, maka Anda harus menggunakan ekstensi konversi dengan branchmap untuk mengubah nama itu. Setiap orang kemudian harus mengkloning repo baru atau menanggalkan cabang lama.
Ini memodifikasi riwayat dan hanya untuk pengguna Mercurial tingkat lanjut. Jangan lakukan ini jika Anda tidak tahu apa artinya itu.
Jika stiging hanya lokal, Anda dapat mengubahnya menjadi staging dengan kombinasi graft dan strip . Mulailah dengan memperbarui ke set leluhur di mana stiging telah menyimpang. Buat cabang pementasan dan graft setiap komit dari stiging ke pementasan. Pementasan sekarang harus menjadi salinan stiging. Terakhir, hancurkan stiging dengan melepaskan komit pertamanya.
hg update {SHA-1 of the ancestor changeset}
hg branch staging
hg graft {first changeset in stiging} ... {stiging head-1} {stiging head}
hg strip {first changeset in stiging}
hg push --new-branch
hg graft {first changeset in stiging}..{stiging head}