Saya sudah selesai mengerjakan cabang fitur feature-x
. Saya ingin menggabungkan hasil kembali ke default
cabang dan menutup feature-x
untuk menyingkirkannya di keluaran hg branches
.
Saya datang dengan skenario berikut, tetapi memiliki beberapa masalah:
$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
Jadi feature-x
cabang (perubahan 40
- 41
) ditutup, tetapi ada satu kepala baru , cabang perubahan 44
yang berubah, yang akan dicantumkan di hg heads
setiap waktu:
$ hg log ...
o 44 Closed branch feature-x
|
| @ 43 merge
|/|
| o 42 Changeset C
| |
o | 41 Changeset 2
| |
o | 40 Changeset 1
|/
o 39 Changeset B
|
o 38 Changeset A
|
Pembaruan : Tampaknya sejak versi 1.5 Mercurial tidak menampilkan kepala cabang yang tertutup dalam keluaran hg heads
lagi.
Apakah mungkin untuk menutup cabang gabungan tanpa meninggalkan satu kepala lagi? Apakah ada cara yang lebih benar untuk menutup cabang fitur?
Pertanyaan-pertanyaan Terkait:
default
tanpa "menutup" mereka. Ini menghasilkan 0 kepala baru tetapi cabang tersebut terlihathg branches
selamanya (sebagai cabang tidak aktif).Jawaban:
Salah satu caranya adalah membiarkan cabang fitur yang digabung tetap terbuka (dan tidak aktif):
Cara lain adalah dengan menutup cabang fitur sebelum bergabung menggunakan komit ekstra:
Yang pertama lebih sederhana, tetapi meninggalkan cabang terbuka. Yang kedua tidak meninggalkan kepala terbuka / cabang, tetapi membutuhkan satu lagi komitmen tambahan. Seseorang dapat menggabungkan komit aktual terakhir ke cabang fitur dengan komit tambahan ini menggunakan
--close-branch
, tetapi orang harus tahu sebelumnya komit mana yang akan menjadi yang terakhir.Pembaruan : Sejak Mercurial 1.5 Anda dapat menutup cabang kapan saja sehingga tidak akan muncul di keduanya
hg branches
danhg heads
lagi. Satu-satunya hal yang mungkin dapat mengganggu Anda adalah bahwa secara teknis grafik revisi masih akan memiliki satu revisi lagi tanpa anak.Pembaruan 2 : Sejak Mercurial 1.8 bookmark telah menjadi fitur inti dari Mercurial. Bookmark lebih nyaman untuk bercabang daripada cabang-cabang yang disebutkan Lihat juga pertanyaan ini:
sumber
Bookmarks are more convenient for branching than named branches
. Bookmark Hg tidak sama dengan cabang Git. Mereka penuh dengan banyak kasus tepi yang membuatnya tidak cocok sebagai cabang fitur. Sebagai contoh: ketika Anda mengkloning repositori Anda akan berakhir dengan komit terbaru didefault
cabang. Jika Anda menggunakan bookmark, perubahan ini terkait dengan bookmark acak (tidak stabil). Jika Anda menggunakan cabang bernama, Anda akan mendapatkan komit terbaru di cabang stabil / default, yang biasanya Anda inginkan. Penanda akan sampai di sana suatu hari, tetapi belum ada di sana.abort: push creates new remote branches:
. Apa yang bisa saya lakukan salah?imho ada dua kasus untuk cabang yang lupa ditutup
Kasus 1: cabang tidak digabung ke default
dalam hal ini saya memperbarui ke cabang dan melakukan komitmen lain dengan --close-branch, sayangnya ini memilih cabang untuk menjadi ujung baru dan karenanya sebelum mendorongnya ke klon lain saya memastikan bahwa ujung yang sebenarnya menerima beberapa perubahan lagi dan yang lainnya jangan bingung tentang tip aneh itu.
Kasus 2: cabang digabung ke default
Kasing ini tidak jauh berbeda dengan kasing 1 dan dapat diselesaikan dengan mereproduksi langkah untuk kasing 1 dan dua kasing tambahan.
dalam hal ini saya perbarui ke cabang changeset, lakukan komit lain dengan --close-branch dan gabungkan perubahan baru yang menjadi tip ke default. operasi terakhir menciptakan tip baru yang ada di cabang default - HOORAY!
Semoga ini bisa membantu pembaca masa depan.
sumber
hg help ci
akan menjelaskannya kepada Anda.EDIT Aduh, sudah terlambat ... Saya tahu membaca komentar Anda yang menyatakan bahwa Anda ingin menjaga fitur-x changeset sekitar, sehingga pendekatan kloning di sini tidak bekerja.
Saya masih akan membiarkan jawabannya di sini karena dapat membantu orang lain.
Jika Anda ingin sepenuhnya menghilangkan "fitur X", karena, misalnya, tidak berfungsi, Anda dapat mengkloning. Ini adalah salah satu metode yang dijelaskan dalam artikel dan itu berhasil, dan berbicara secara khusus tentang kepala.
Sejauh yang saya mengerti Anda memiliki ini dan ingin menyingkirkan "feature-x" head sekali dan untuk semua:
Jadi kamu melakukan ini:
Dan Anda akan memiliki yang berikut ini, dan Anda akan melihat bahwa fitur-x memang hilang:
Saya mungkin salah paham tentang apa yang Anda inginkan tetapi tolong jangan dimatikan, saya mengambil waktu mereproduksi use case Anda :)
sumber
Sungguh aneh, bahwa belum ada yang menyarankan cara paling kuat untuk menutup cabang fitur ... Anda bisa menggabungkan gabungan komit dengan flag --close-branch (mis. Komit file yang dimodifikasi dan tutup cabang secara bersamaan):
Jadi, itu saja. Tidak ada kepala tambahan pada revgraph. Tidak ada komitmen ekstra.
sumber
merge
perintah, mungkin ide yang baik untuk digunakanhg branch
untuk memverifikasi bahwa nama cabang dari penggabungan adalah salah satu yang ingin Anda tetap buka.