Jadi saya terus membuat kesalahan konyol di Mercurial. Sering kali, saya akan mulai bekerja tanpa melakukan "tarik hg" dan "pembaruan hg." Ketika saya mencoba untuk mendorong perubahan saya, saya mendapatkan kesalahan.
Apakah ada cara untuk menghapus komit lokal saya sehingga saya dapat menghindari membuat beberapa kepala, cabang, dll? Saya hanya ingin menghapus komit lokal saya, menggabungkan perubahan saya dengan tip, dan kemudian komit kembali. Kedengarannya sederhana, bukan? Sepertinya saya tidak dapat menemukan cara untuk menghapus komit lokal dengan mudah sehingga saya dapat bergabung dengan tip dengan bersih.
Sekali lagi, saya hanya mencoba menghapus komit lokal yang dibuat dengan "hg ci". Saya tidak ingin mengubah file, mengembalikan, dll.
Jawaban:
Aktifkan ekstensi " strip " dan ketikkan yang berikut:
Di mana
#changeset#
hash untuk perubahan yang ingin Anda hapus. Ini akan menghapus set perubahan yang dimaksud termasuk perubahan yang turun darinya dan akan membuat direktori kerja Anda tidak tersentuh . Jika Anda ingin juga mengembalikan perubahan kode yang dikomit, hapus--keep
opsi.Untuk informasi lebih lanjut, periksa Strip Extension .
Jika Anda mendapatkan "strip perintah" yang tidak dikenal, Anda mungkin perlu mengaktifkannya. Untuk melakukannya menemukan
.hgrc
atauMercurial.ini
berkas dan menambahkan berikut untuk itu:Perhatikan bahwa (seperti yang disebutkan Juozas dalam komentarnya) memiliki banyak kepala adalah alur kerja normal dalam Mercurial. Anda seharusnya tidak menggunakan perintah strip untuk melawan itu. Sebagai gantinya, Anda harus menggabungkan kepala Anda dengan kepala yang masuk, menyelesaikan setiap konflik, menguji, dan kemudian mendorong.
The
strip
perintah ini berguna bila Anda benar-benar ingin menyingkirkan changesets yang mencemari cabang. Bahkan, jika Anda berada dalam situasi pertanyaan ini dan Anda ingin menghapus semua set perubahan "draft" secara permanen, periksa jawaban teratas , yang pada dasarnya menyarankan untuk melakukan:sumber
strip =
tidak apa-apa. WhatsNew for Mercurial 2.8Jika Anda menggunakan Hg Tortoise cukup aktifkan ekstensi " strip " di:
Kemudian pilih revisi bawah dari tempat Anda ingin memulai striping, dengan melakukannya
right click
, dan memilih:Seperti ini:
Dalam contoh ini akan dihapus dari revisi ke 19 ke yang terakhir dilakukan (22).
sumber
File/Settings/Extensions/
Saya berharap bisa menambahkan lebih banyak suara. Terima kasih banyak!--keep
dan TortoiseHg tidak memberikan opsi itu. Jadi ... Anda harus melakukannya di baris perintah denganhg strip -r . --keep
.Jawaban modern (hanya relevan setelah Mercurial 2.1):
Gunakan Fase dan tandai revisi yang tidak ingin Anda bagikan sebagai rahasia (pribadi). Dengan begitu ketika Anda menekan mereka tidak akan dikirim.
Di TortoiseHG Anda dapat mengklik kanan komit untuk mengubah fase-nya.
Juga: Anda juga dapat menggunakan ekstensi "rebase" untuk memindahkan komit lokal Anda ke kepala repositori bersama setelah Anda menarik.
sumber
Seperti yang ditunjukkan semua orang, Anda mungkin hanya perlu menarik dan kemudian menggabungkan kepala, tetapi jika Anda benar-benar ingin menyingkirkan komitmen Anda tanpa alat EditingHistory maka Anda dapat
hg clone -r
repo Anda untuk mendapatkan semua kecuali perubahan itu.Ini tidak menghapusnya dari repositori asli, tetapi itu membuat klon baru yang tidak memilikinya. Kemudian Anda dapat menghapus repo yang Anda modifikasi (jika mau).
sumber
Saya menemukan masalah ini juga. Saya membuat 2
commit
dan ingin mengembalikan dan menghapus kedua commit.Tapi
hg rollback
kembali ke komit terakhir, bukan 2 komit. Saat itu saya tidak menyadarinya dan saya mengubah kodenya.Ketika saya menemukan
hg rollback
baru saja mengembalikan satu komit, saya menemukan saya bisa menggunakanhg strip #changeset#
. Jadi, saya biasahg log -l 10
menemukan 10 komitmen terbaru dan mendapatkan perubahan yang tepat yang saya inginkanstrip
.Apa
abort: local changes found
artinya Ini berartihg
menemukan perubahan pada kode yang belum dilakukan. Jadi, untuk menyelesaikan ini, Anda harushg diff
menyimpan kode yang telah Anda ubah danhg revert
danhg strip #changeset#
. Seperti ini:Setelah Anda melakukan hal di atas, Anda dapat
patch
file diff dan kode Anda dapat ditambahkan kembali ke proyek Anda.sumber
Anda dapat menyiasatinya dengan lebih mudah dengan ekstensi Rebase , cukup gunakan
hg pull --rebase
dan komit Anda secara otomatis dikirim kembali ke revisi yang ditarik, menghindari masalah percabangan.sumber
Jika Anda terbiasa dengan git, Anda akan senang menggunakan histedit yang berfungsi seperti itu
git rebase -i
.sumber
hg strip
adalah apa yang kamu cari. Ini analoggit reset
jika Anda terbiasa dengan git.Gunakan konsol:
Anda perlu tahu nomor revisi.
hg log -l 10
. Perintah ini menunjukkan 10 komit terakhir. Temukan komit yang Anda cari. Anda memerlukan 4 digit angka dari baris changesetchangeset: 5888:ba6205914681
Lalu
hg strip -r 5888 --keep
. Ini menghapus catatan dari komit tetapi membuat semua file dimodifikasi dan kemudian Anda bisa komit kembali. (jika Anda ingin menghapus file hanya menghapus --keephg strip -r 5888
sumber
[Hg Tortoise 4.6.1] Jika ini adalah tindakan terbaru, Anda dapat menggunakan tindakan "Kembalikan / Batalkan" (Ctrl + U).
sumber
Selain jawaban excelent Samaursa, Anda dapat menggunakan
evolve
ekstensiprune
sebagai versi yang aman dan dapat dipulihkanstrip
yang memungkinkan Anda untuk kembali jika Anda melakukan kesalahan.Saya memiliki alias ini di
.hgrc
:Catatan yang
prune
juga memiliki--keep
, sama sepertistrip
, untuk menjaga direktori kerja tetap memungkinkan Anda untuk mengaktifkan kembali file.sumber