Saya menggunakan Mercurial dan saya mengalami kekacauan yang mengerikan secara lokal, dengan tiga kepala. Saya tidak bisa mendorong, dan saya hanya ingin menghapus semua perubahan lokal saya dan melakukan dan mulai lagi dengan kode yang benar-benar bersih dan riwayat yang bersih.
Dengan kata lain, saya ingin mengakhiri dengan (a) kode yang persis sama secara lokal seperti yang ada di ujung cabang jarak jauh dan (b) tidak ada riwayat dari setiap komit lokal.
Saya tahu hg update -C
menimpa perubahan lokal apa pun. Tapi bagaimana cara menghapus komit lokal?
Untuk lebih jelasnya, saya tidak tertarik untuk melestarikan semua pekerjaan yang telah saya lakukan secara lokal. Saya hanya ingin cara termudah untuk kembali ke kasir lokal yang benar-benar bersih.
sumber
Jawaban:
Ketika cara paling sederhana (baru
hg clone
) tidak praktis, saya menggunakanhg strip
:Ulangi sampai
hg outgoing
diam. Perhatikan bahwahg strip $rev
melenyapkan$rev
dan semua keturunannya.Perhatikan bahwa Anda mungkin harus mengaktifkannya terlebih dahulu
strip
di pengaturan Mercurial .PS: pendekatan yang lebih cerdas adalah dengan menggunakan bahasa revset, dan melakukan:
sumber
hg strip 'roots(outgoing())'
dalam bekerja karena tidak mengenalinya'roots(outgoing())'
. Saya bisa membuatnya bekerjahg strip "roots(outgoing())"
.cmd.exe
, ya.Anda akan ingin membuat klon lokal di mana Anda hanya menyimpan kumpulan perubahan yang juga ada di repositori jarak jauh. Gunakan TortoiseHg ,
hg log
atau yang serupa untuk mencari tahu mana dari revisi Anda yang merupakan revisi terakhir yang tidak Anda buat (yang sebelum kekacauan dimulai). Menggunakanhg outgoing
dapat membantu di sini - ini akan mencantumkan semua set perubahan yang Anda buat - pilih nomor revisi lebih awal dari yang mana pun.Jika revisi target dipanggil
good
dan klon Anda dipanggilfoo
, lakukan:Ini akan menjadi operasi lokal yang cepat - tidak ada alasan untuk mengunduh semuanya lagi . The
foo-clean
clone hanya akan berisi changesets hingga revisigood
. Anda sekarang dapat menggantifoo-clean/.hg/hgrc
denganfoo/.hg/hgrc
untuk mempertahankan pengaturan lokal-repositori Anda seperti jalur push / pull default.Ketika Anda puas karena
foo-clean
memiliki semua yang Anda butuhkanfoo
, maka cukup hapusfoo
dan ganti namafoo-clean
menjadifoo
. Lakukan ahg pull
untuk mendapatkan perubahan baru dari repositori jarak jauh ke klon Anda dan lanjutkan seperti biasa.Jika tidak ada yang mendorong perubahan baru ke repositori jarak jauh, maka sangat mudah untuk menentukan revisi mana yang ingin Anda gunakan seperti di
good
atas:hg id default
akan memberi tahu Anda ID tip di repositori jarak jauh.sumber
hg pull -r
revisi "bagus" terakhir dari setiap cabang tambahan.Baik. Jadi hapus saja semua barang lokal,
hg init
repositori lokal baru danhg pull
tip terbaru yang Anda miliki. Jangan lupahg update
setelah ini.sumber
hg init
+hg pull
=hg clone
Perbedaannya adalah ituhg clone
membuat.hg/hgrc
file bagus untuk Anda dan ituhg clone
akan menggunakan hardlink untuk menghemat ruang saat mengkloning pada sistem file yang sama.hg help init
ada di sini: selenic.com/mercurial/hg.1.html#init Tapi mungkin itu terlalu singkat? Silakan kirim email ke milis kami jika Anda membutuhkan bantuan lebih lanjut! Lihat: mercurial.selenic.com/wiki/MailingListsAnda dapat menggunakan
untuk menghentikan revisi apa pun dan subtree di repositori lokal Anda.
https://www.mercurial-scm.org/wiki/Strip
Tetapi jangan mencoba menggunakannya untuk apa pun yang sudah didorong.
sumber
Hapus saja semua yang Anda miliki di sistem lokal Anda dan kloning ulang repo jarak jauh.
sumber
melakukan trik untuk saya.
Ini menghapus semua revisi yang tidak didorong ke repositori default yang dibuat dengan nama penulis Anda.
Anda juga bisa menggunakan gaya ini agar tidak memeriksa dengan repositori default tetapi dengan Repositori lain
sumber
Jika Anda menggunakan TortoiseHg, satu cara sederhana untuk keluar dari kekacauan (kecil) adalah dengan memperbarui revisi terbaru, kemudian pilih set perubahan Anda dan mulai "gabungkan dengan lokal". Saat dialog penggabungan muncul, cukup klik ikon '+' kecil untuk menampilkan beberapa opsi tambahan, salah satunya adalah "buang kumpulan perubahan dari revisi target penggabungan (lainnya)". Melakukan hal ini berarti perubahan Anda akan tetap ada di repo dan didorong, tetapi tidak akan berpengaruh, karena perubahan itu akan dibuang dalam penggabungan. Jika Anda memiliki banyak set perubahan yang mencakup banyak kepala, Anda mungkin tidak ingin mencemari repo dengan cara ini, tetapi ini adalah perbaikan sederhana dan patut dipertimbangkan jika set perubahan yang Anda buang berisi data yang mungkin ingin Anda rujuk nanti.
sumber