Bagaimana cara meninggalkan penggabungan hg?

131

Saya baru berkolaborasi dengan Mercurial. Situasi saya:

  • Programmer lain mengubah rev 1 file untuk mengganti indentasi 4-ruang dengan indentasi 2-ruang. (Yaitu mengubah setiap baris.) Panggil rev 2 itu, didorong ke repo jarak jauh.
  • Saya telah melakukan perubahan substantif rev 1 dengan berbagai perubahan kode di ruang kerja lokal saya. Sebut rev itu 3.
  • Saya sudah hg pulled dan hg merged tanpa ide yang jelas tentang apa yang sedang terjadi.
  • Konflik itu banyak sekali dan tidak terlalu substantif.

Jadi saya benar-benar berharap saya mengubah repo lokal saya ke indentasi 2-ruang sebelum bergabung; maka penggabungan akan sepele (saya seandainya). Tapi sepertinya aku tidak bisa mundur. Saya pikir saya perlu hg update -r 3tetapi katanya abort: outstanding uncommitted merges.

Bagaimana saya bisa membatalkan gabungan, perubahan spasi di repo lokal saya, dan muncul kembali?

Grumdrig
sumber

Jawaban:

126

Anda dapat membuang perubahan yang tidak dikomit dengan flag -C (atau --clean):

hg update -C -r 3

WASPADALAH: Segala sesuatu yang tidak dilakukan akan hilang!

Setelah itu Anda mungkin harus menggunakan beberapa jenis alat formatter kode untuk melakukan seluruh operasi, atau setidaknya beberapa menemukan dan mengganti dengan ekspresi reguler. Sesuatu yang sederhana seperti mengganti yang cocok ^____(menggunakan 4 spasi alih-alih garis bawah) dengan __(2 spasi), diulang beberapa kali (kecuali jika Anda memiliki beberapa kode bertingkat) harus bekerja.

R. Martinho Fernandes
sumber
Oh terima kasih. Anda pasti sudah menjawab dengan benar ketika saya menemukan jawabannya sendiri. Saya di emacs, begitu M-x indent-regionpula trik reindent.
Grumdrig
6
Perlu dicatat bahwa file yang tidak dilacak tidak akan dihapus.
djsutho
132

BTW: jika Anda baru saja mengembalikan gabungan yang Anda lakukan dan 3 bukan nomor revisi Anda, Anda bisa melakukan ini:

hg update -C -r .
matematika
sumber
24
Bagi siapa pun seperti saya yang pada awalnya tidak memahami cara kerjanya: titik .adalah pintasan ke revisi sebelumnya.
Jeroen Wiert Pluimers
1
jawaban bagus! harus menjadi yang terbaik
Oleg Abrazhaev
1
@ Timine: Dari hg help updatesaya dapatkan: Jika tidak ada perubahan yang ditentukan, perbarui ke ujung cabang bernama saat ini ... dan tip mungkin tidak selalu menjadi revisi Anda saat ini yang sedang Anda kerjakan. Saya tidak mengujinya, sejauh ini ..
matematika
1
Ah itu adalah detail yang bagus untuk diketahui ... sebenarnya saya akan menghapus komentar saya dengan menyatakan meninggalkannya -r .adalah sama
Thymine
Sederhana dan sangat membantu.
Naveen Kumar V
33

Untuk membatalkan gabungan yang tidak dikomit, gunakan

hg update --clean

yang akan memeriksa salinan bersih dari induk gabungan asli, kehilangan semua perubahan.

Tao
sumber
2

Saya tampaknya hanya perlu hg update -C -r 3, yang menimpa file lokal saya dengan rev dalam pikiran (yang saya pikir hg updateakan lakukan; tapi saya salah.) Terima kasih atas bantuan saya!

Grumdrig
sumber
2
Menambahkan -Catau --cleanadalah bagaimana Anda memberi tahu Mercurial untuk melanjutkan, bahkan ketika itu akan membuang beberapa file yang dimodifikasi. Anda benar yang hg update -r Xbiasanya akan membawa Anda ke revisi X, tetapi ketika Anda berada dalam penggabungan, Anda perlu bersikeras sedikit lebih banyak :-)
Martin Geisler
7
Saya pikir "hg revert --all --cancelmerge" akan jauh lebih intuitif.
Warren P