Ada komitmen yang tidak berfungsi, jadi saya ingin mengabaikannya tanpa menghapusnya dari sejarah .
Saya telah memperbarui dari revisi sebelumnya dan berkomitmen, sehingga menciptakan kepala baru.
Saya tidak memiliki cabang, saya tidak ingin cabang, saya hanya ingin melanjutkan dengan kepala baru persis seperti itu, tidak ada yang mewah, tidak ada penggabungan, tidak ada kekhawatiran, terus melupakan yang sebelumnya.
Sepertinya saya tidak dapat menemukan cara untuk melakukan itu, dan saya mulai percaya itu tidak dapat dilakukan. Yang saya temukan adalah hal-hal tentang cabang, atau hal-hal tentang penggabungan.
Jawaban:
Perbarui repositori Anda ke kepala dengan revisi yang ingin Anda lupakan, lalu gunakan
hg commit --close-branch
untuk menandai cabang (anonim) itu sebagai ditutup. Lalu update ke kepala cabang yang Anda lakukan inginkan, dan terus bekerja.Anda masih dapat melihat cabang tertutup jika Anda menggunakan
-c
opsi untukhg heads
, tetapi tidak akan muncul secara default danhg merge
akan tahu tidak mencoba untuk bergabung dengan kepala tertutup.Anda harus menggunakan
hg push --force
pertama kali Anda mendorong kepala tertutup ini ke repositori lain karena Anda benar-benar membuat kepala tambahan di repositori jarak jauh ketika Anda menekan. Jadi beri tahu Mercurial bahwa ini tidak masalah--force
. Orang yang menarik kepala tertutup tidak akan diganggu oleh peringatan apa pun.sumber
hg heads
... Saya menggunakan mercurial 1.4.3, apakah itu fitur yang lebih baru?hg branches
tetap harus menunjukkan nama cabang tempat Anda berada. Daripada mencoba untuk menutup cabang, gabungkan cabang anonim Anda kembali ke cabang asli, buang semua perubahan.Saya tahu Anda tidak ingin bekerja dengan cabang pada tahap ini, tetapi itulah yang Anda lakukan. Ketika Anda kembali ke versi sebelumnya dan melakukan sesuatu yang berhasil, Anda membuat cabang - cabang yang tidak disebutkan namanya, tetapi cabang yang sama.
Tidak ada masalah dengan hanya meneruskan seperti Anda dan tidak perlu khawatir memiliki banyak kepala, tetapi jika Anda ingin merapikan semuanya sehingga Anda tidak sengaja mengambil kepala yang salah satu kali maka Anda dapat membunuh cabang lama.
Ada bagian yang bagus dalam dokumentasi Mercurial yang akan membawa Anda melalui sejumlah opsi di sekitar Cabang Pemangkasan yang Mati .
Saya pikir pilihan terbaik bagi Anda adalah menandai cabang lama sebagai "ditutup". Jika kepala lama Anda revisi "123", maka:
sumber
-C
dihg update
? Tampaknya tidak ada file yang akan dimodifikasi, jadi seharusnya berfungsi tanpa itu.Pertama-tama, ketik:
Bayangkan, Anda memiliki tiga kepala yang terdaftar:
Katakanlah, Anda ingin tetap mengaktifkan kepala terakhir (223) dan menutup sisanya.
Anda kemudian akan melakukan sebagai berikut:
Tutup kepala # 59
Tutup kepala # 123
Komit perubahan
Jangan lupa untuk beralih ke kepala kanan di akhir
Dan kamu sudah selesai.
sumber
--close-branch -m "Closing branch - technique #2 abandoned in favor of technique #3"
.hg up -r 223
sebelum melakukan perubahan.hg push --force
, tidak hanyahg push
untuk melewati peringatan tentang mendorong banyak kepala.hg push
dengan sendirinya tidak bekerja untuk saya. Bagaimana Anda menyarankan mendorong perubahan ke repo eksternal jika menolak karena beberapa kepala?Anda ingin menggunakan
hg backout
. Ini menghapus perubahan yang dibuat oleh perubahan dari perubahan anak.Lihat ini untuk penjelasan yang bagus. Backur Mercurial
sumber
Baik jawaban Niall dan Nick langsung. Karena saya menemukan diri saya membuat banyak kepala menggantung, saya akhirnya menulis alias untuk menutup kepala lebih mudah. Dengan menambahkan ini ke
.hgrc
:(jika Anda sudah memiliki
[alias]
bagian, Anda dapat menambahkannya sebagai gantinya)Anda sekarang dapat menutup kepala dalam satu perintah tunggal (dan tanpa harus memperbarui ke set perubahan yang berbeda secara manual) seperti ini:
Catatan: alias mengambil keuntungan dari fakta bahwa alias Mercurial dapat menjadi perintah shell . Ini berarti bahwa ini mungkin hanya akan bekerja pada UNIX, bukan pada Windows.
sumber
Alternatif untuk menutup atau membuka cabang yang tidak diinginkan adalah dengan menggabungkannya dengan cara yang benar-benar membuang efeknya, tetapi meninggalkannya dalam sejarah. Pendekatan ini akan memungkinkan perubahan yang tidak diinginkan untuk menyebar dalam dorongan - jadi hanya gunakan ini jika itu adalah efek yang dimaksudkan.
Katakanlah riwayat perubahan terlihat seperti ini:
dan itu
5
dan6
yang tidak lagi diinginkan.Kamu bisa melakukan ini:
yang akan membuat ini:
Pembaruan untuk
8
memastikan Anda bekerja di kepala yang diinginkan dalam sejarah, yang ingin Anda pertahankan.The
-t :local
menginstruksikan Hg menggunakan gabungan "alat" yang disebut lokal yang mengatakan itu untuk mengabaikan perubahan dari cabang lain, yaitu, satu TIDAK diwakili oleh negara folder kerja saat ini. Info lebih lanjut .Dengan demikian perubahan yang tidak diinginkan dalam
5
dan6
disimpan dalam sejarah tetapi tidak mempengaruhi sesuatu yang lebih baru.sumber
Ini adalah kasus penggunaan untuk ekstensi Evolve . Saat ini tidak dibundel dengan Mercurial, jadi secara teknis ekstensi pihak ketiga. Tapi itu digunakan cukup banyak oleh sekelompok orang, termasuk pengembang Mercurial, sedang sangat aktif dikembangkan, dan tidak ke mana-mana.
Dengan ekstensi Evolve, Anda cukup melakukannya
dan melanjutkan hidup Anda. Set masih akan ada di sana, tetapi usang. Ini tidak akan terlihat kecuali Anda memberikan
--hidden
opsi ke perintah Mercurial, dan secara default tidak akan didorong ke repositori jarak jauh. Meskipun saya pikir Anda bisa memaksanya jika Anda benar-benar mau.Jika cset yang Anda pangkas memiliki leluhur yang ingin Anda pertahankan, maka Anda harus berlari
hg evolve
untuk membuat ulang perubahan itu.hg evolve
akan melakukannya secara otomatis. Kalau tidak, Anda tidak perlu melakukan apa pun.sumber
Anda dapat mengkloning repo Anda yang rusak ke yang baru tanpa mengkloning kepala yang tidak diinginkan itu. Kemudian hapus repositori lama, pindahkan klon yang baru dibuat ke tempat asli dan terus bekerja dengannya. Ini akan memakan waktu, tetapi Anda akan mendapatkan repositori yang benar-benar bersih tanpa tanda revisi yang tidak diinginkan.
sumber
Saya telah mengalami masalah ini berkali-kali ketika saya ingin memenggal kepala yang dibuat karena kesalahan. Saya selalu ingin melihatnya menghilang dari muka bumi.
Pada salinan lokal Anda, dapatkan yang terbaru dan kemudian:
Temukan awal kepala yang ingin Anda lepas (di mana leher baru mulai bercabang), dapatkan nomor revisi
Strip itu.
Sumber: TipsAndTricks .
Sumber: PruningDeadBranches # Using_strip .
Repo Anda sekarang harus memiliki kepala dilucuti. Langkah terakhir ini penting karena pengupasan tidak membuat perubahan apa pun yang Anda bisa mendorong ke repositori pusat Anda. Tanpa langkah terakhir, Anda hanya perlu menelanjangi kepala secara lokal.
sumber