Saya tidak sengaja melakukan terlalu banyak file ke repositori SVN dan mengubah beberapa hal yang tidak saya maksud. (Menghela napas.) Untuk mengembalikan mereka ke keadaan semula, yang terbaik yang bisa saya lakukan adalah
svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
Astaga! Apakah tidak ada cara yang lebih baik? Mengapa saya tidak bisa menulis sesuatu seperti ini:
svn revert -r 854 l3toks.dtx
Oke, saya hanya menggunakan v1.4.4, tapi saya membaca sekilas daftar perubahan untuk cabang 1.5 dan saya tidak bisa melihat apa pun yang berhubungan langsung dengan ini. Apakah saya melewatkan sesuatu?
Sunting: Saya kira saya tidak cukup jelas. Saya tidak berpikir saya ingin membalikkan merge, karena saya akan kehilangan perubahan yang saya lakukan ingin membuat! Katakan itu fileA
dan fileB
keduanya dimodifikasi tetapi saya hanya ingin melakukan fileA
; tidak sengaja mengetik
svn commit -m "small change"
melakukan kedua file, dan sekarang saya ingin memutar kembali fileB
. Membalikkan penggabungan membuat tugas ini tidak lebih mudah (sejauh yang saya tahu) daripada langkah-langkah yang saya uraikan di atas.
Jawaban:
atau
Kedua perintah itu setara .
sumber
svn merge -c -854 my.file
, dan kemudian lakukansvn diff
, tampaknya akan menampilkan satu revisi sebelum 854 (yaitu, 853 ); hanya ketika saya melakukannyasvm merge -c 854 myfile
(tanpa-
), sepertinya myfile dikembalikan ke rev 854. Terima kasih lagi, tepuk tangan!Lihatlah bagian " membatalkan perubahan " dari buku svn
sumber
maaf menggunakan beberapa ruang hanya pada pengulangan dari jawaban yang diberikan sebelumnya - tapi ini adalah sesuatu yang selalu berakhir dengan masalah.
Katakanlah saya telah memperbarui file lokal ke revisi terbaru, yaitu 854. Lalu, saya ingin mendapatkan revisi yang lebih lama - versi file dari beberapa revisi sebelumnya, katakan revisi 851.
Salin akan berfungsi:
.. Namun, saya tidak dapat diganggu grepping untuk URL repo :)
Pembaruan yang tampaknya berfungsi:
... namun, ini juga menandai salinan lokal sebagai "baru diperiksa", atau lebih tepatnya "sama dengan revisi online" (yaitu di Tortoise / RabbitVCS Anda mendapatkan tanda centang OK hijau) - yang berarti Anda tidak dapat melakukan
svn ci -m "rolled back to r 851"
: hanya karena lokalsubversion
dieksekusi tidak akan melihat perubahan lokal, dan tidak akan repot untuk mengunggah apa pun ke repositori online.Dan, seperti yang sudah dijawab, membalikkan penggabungan berfungsi - tetapi dalam kasus ini, orang seharusnya tidak mengandalkan sintaks pintasan; tetapi secara khusus nyatakan:
Harus saya akui - saya tidak akan pernah mengerti kalimat " Membalikkan r854 melalui r852 ke dalam file " berarti " Baru saja mendapatkan r851 dari file Anda, dan menimpa apa pun yang sebelumnya Anda miliki secara lokal - dan ditandai sebagai berbeda dari revisi online terbaru, jadi Anda dapat memeriksanya kembali secara online sebagai revisi 'rollback' baru ", tapi saya kira (dan harap :)) itulah fungsinya :)
Setelah ini, seseorang dapat menggunakan
svn diff
untuk memastikan dengan cepat jika kami mendapatkan revisi yang tepat secara lokal; dan juga, file tersebut akan ditandai dengan tanda seru merah di Tortoise / RabbitVCS (yaitu, berbeda dari versi terbaru yang dilakukan), dansvn ci -m "rolled back to r 851"
dapat dijalankan saat ini.Juga, perhatikan bahwa jika Anda, akhirnya, berubah pikiran setelah penggabungan terbalik ( yaitu Anda ingin tetap bekerja pada revisi terbaru, HEAD, di sini 854 - setelah Anda kembali ke 851 secara lokal, tetapi belum melakukan rollback ), Anda tidak boleh menggunakan
svn up
, karena itu hanya akan mengatakan bahwa itu sudah " Pada revisi 854 "; gunakan sebagai gantinyasvn revert --recursive .
atau serupa ...Bersulang!
Ref: Cara Roll Back Changes menggunakan Subversion - Jacob Wright - Flex, AIR, PHP, dll.
EDIT: ... dan ternyata, efek yang persis sama dengan
svn merge -r HEAD:851 l3toks.dtx
, dapat dicapai dengan:sumber
--force
untuk menimpa direktori. Ingat saja itu akan menimpa perubahan apa pun.svn export
- apakah saya kehilangan sesuatu atau apakah itu tidak diterapkan dalam GUI ini?Baru-baru ini saya harus kembali ke revisi tertentu untuk men-debug bangunan yang lebih tua dan ini berfungsi seperti sulap:
Saya harus menyelesaikan semua konflik menggunakan opsi "tc" karena saya tidak peduli dengan perubahan lokal (memeriksa semua yang saya pedulikan sebelum kembali)
Untuk kembali ke kepala revisi juga sederhana:
sumber
Apa yang Anda cari disebut "reverse merger". Anda harus berkonsultasi dengan dokumen tentang fungsi penggabungan dalam buku SVN (seperti luapyad, atau lebih tepatnya komentator pertama pada posting itu, tunjukkan). Jika Anda menggunakan Tortoise, Anda juga bisa langsung masuk ke tampilan log dan klik kanan dan pilih "kembalikan perubahan dari revisi ini" pada salah satu tempat Anda melakukan kesalahan.
sumber
Reverse gabung adalah persis apa yang Anda inginkan (lihat jawaban luapyad). Cukup terapkan gabungan ke file yang dikomit secara salah alih-alih seluruh direktori.
sumber
Jika Anda hanya ingin membatalkan checkin terakhir, Anda dapat menggunakan yang berikut ini
Dengan begitu, Anda tidak perlu mencari nomor versi saat ini dan sebelumnya.
sumber
svn menggabungkan akan menggabungkan revisi, bukan mengembalikannya. yaitu jika Anda memiliki beberapa tambahan dalam versi HEAD Anda kemudian menggabungkannya dengan revisi sebelumnya, maka perubahan akan tetap ada.
Saya menggunakan svn cat kemudian mengarahkannya ke file:
Kemudian Anda memiliki konten 851 dalam file itu dan dapat memeriksanya kembali.
sumber
Jika Anda menggunakan Eclipse IDE dengan plugin SVN, Anda dapat melakukannya sebagai berikut:
Ini akan mengembalikan file ke revisi yang Anda inginkan. Perlu diingat bahwa SVN akan melihat perubahan sebagai komit baru. Artinya, perubahan mendapat nomor revisi baru, dan tidak ada tautan antara revisi lama dan yang baru. Anda harus menentukan dalam komentar komit bahwa Anda mengembalikan file-file itu ke revisi tertentu.
sumber