Bagaimana saya bisa membatalkan perubahan Mercurial terakhir yang tidak sengaja dilakukan (tidak didorong)?
Jika memungkinkan, cara untuk melakukannya dengan TortoiseHg akan lebih disukai.
Memperbarui
Dalam kasus konkret saya, saya melakukan perubahan (tidak didorong). Kemudian saya menarik dan memperbarui dari server. Dengan pembaruan baru ini saya putuskan, bahwa komit terakhir saya sudah usang dan saya tidak ingin menyinkronkannya. Jadi sepertinya, itu hg rollback
bukan yang saya cari, karena itu akan mengembalikan tarikan daripada komit saya.
mercurial
tortoisehg
mercurial-commit
Martin Buberl
sumber
sumber
hg rollback
, lalu menarik lagi?strip --keep
: stackoverflow.com/questions/29413851/… langsung menyelesaikan tugas, seperti halnya MQ qimport. Sebagai alternatif, mungkin lebih baik hanya denganrebase
skenario jika perubahan lokal juga harus dijaga dan tidak ada konflik. (Gunakan gabungan untuk menyimpan beberapa perubahan gabungan dari kedua cabang saat itu adalah tujuan akhir grafik yang diinginkan, terutama pada kasus non-fastforward.) Mungkin juga berlaku hanya untuk menutup cabang, yang masih 'mempertahankan sejarah' (tetapi berbeda dari gabungan) tergantung pada kondisi akhir yang diinginkan.hg strip --keep
adalah perintah melakukan digunakan, tetapi Anda perlu memberikan revisi, misalnya:hg strip --keep -r .
. Jawaban ini menjelaskan dengan baik stackoverflow.com/a/19064016/1286571Jawaban:
Salah satu caranya
(ditinggalkan pada Hg2.7, Agustus 2013)hg rollback
Lihat bagian Pemulihan TortoiseHg :
Utas ini juga merinci perbedaan antara
hg rollback
danhg strip
:(ditulis oleh Martin Geisler yang juga berkontribusi pada SO)
ForeverWintr menyarankan dalam komentar (pada 2016, 5 tahun kemudian)
sumber
hg rollback
akan membatalkan tarikan alih-alih komit.hg commit --amend
kerjanya, tetapi bagi saya itu memberi saya editor untuk mengubah pesan komit dan tidak ada metode untuk mengubah file mana yang disertakan. Saya keluar dari editor tanpa menyimpan dan menemukan bahwa komit saya yang salah telah diubah untuk menyertakan SEMUA file yang diubah!hg commit --amend
. Anda dapat 'membatalkan komitmen' file dengan pertama-tama mengambilnyahg forget
, misalhg forget filea; hg commit --amend
:, tetapi itu tampaknya tidak intuitif. hg strip --keep mungkin merupakan solusi yang lebih baik untuk hg modern.hg strip
akan sepenuhnya menghapus revisi (dan keturunan apa pun) dari repositori.Untuk menggunakan strip Anda harus menginstal MqExtension dengan menambahkan baris berikut ke .hgrc Anda (atau mercurial.ini):
Di TortoiseHg, perintah strip tersedia di meja kerja. Klik kanan pada revisi dan pilih 'Modify history' -> 'Strip'.
Karena
strip
mengubah riwayat repositori, Anda hanya boleh menggunakannya pada revisi yang belum dibagikan kepada siapa pun. Jika Anda menggunakan lincah 2.1+ Anda dapat menggunakan fase untuk melacak informasi ini. Jika komit masih dalam tahap konsep, belum dibagi dengan repositori lain sehingga Anda dapat menghapusnya dengan aman. (Terima kasih kepada Zasurus karena menunjukkan ini).sumber
Karena Anda tidak dapat mengembalikan, Anda harus menggabungkan komit ke kepala baru yang Anda dapatkan saat menarik. Jika Anda tidak ingin ada pekerjaan yang Anda lakukan di dalamnya, Anda dapat dengan mudah melakukannya menggunakan tip ini .
Jadi, jika Anda menarik dan memperbarui ke kepala mereka, Anda dapat melakukan ini:
menyimpan semua perubahan dalam revisi yang sedang diperiksa, dan tidak ada perubahan dalam revisi yang tidak dicentang (yang Anda tulis yang tidak lagi Anda inginkan).
Ini adalah cara yang bagus untuk melakukannya karena membuat riwayat Anda akurat dan lengkap. Jika 2 tahun dari sekarang seseorang menemukan bug dalam apa yang Anda tarik, Anda dapat melihat implementasi (yang tidak digunakan tetapi disimpan) Anda pada hal yang sama dan berkata, "oh, saya melakukannya dengan benar". :)
sumber
hg rollback
adalah apa yang kamu inginkan.Dalam TortoiseHg,
hg rollback
dilakukan dalam dialog komit. Buka dialog komit dan pilih "Undo".sumber
Dalam versi terbaru dari TortoiseHg Workbench 4.4.1 (07.2018) Anda dapat menggunakan
Repository
-Rollback/undo...
:sumber
Penanganannya.
Jika Anda tidak mendorong ke server, Anda akan mengkloning ke folder baru yang lain pembatalan (menghapus semua file) dari folder repositori Anda dan mengkloning baru.
sumber
setelah Anda menarik dan memperbarui ruang kerja Anda lakukan thg dan klik kanan pada set perubahan yang ingin Anda singkirkan dan kemudian klik modifikasi histori -> strip, itu akan menghapus set perubahan dan Anda akan menunjuk ke tip default.
sumber