Bagaimana cara mendapatkan versi file tertentu di Mercurial?
114
Saya baru mengenal Mercurial. Tidak dapat menemukan perintah yang benar. Mencoba update / checkout tidak berhasil. Saya menggunakan repositori lokal. Terima kasih
@Omnifarious: Saya menggunakan versi file yang stabil. Kemudian terus mengerjakan file tersebut tetapi segera saya menyadari bahwa saya memerlukan versi "bagus" terakhir. Ini dapat dilakukan dengan memperbarui di svn tetapi ketika saya mencoba pembaruan hg, dikatakan "0 file ..."
Codism
Jawaban:
153
Saya pikir Anda mau hg revert -r<rev> <file>(ini akan mengubah file itu menjadi seperti pada revisi yang diberikan).
atau cukup hg kembalikan <filename> jika Anda ingin membuang perubahan Anda saat ini, dan dapatkan yang terbaru yang telah berkomitmen
BlackTigerX
@BlackTigerX Tanpa revisi, file yang tidak dimodifikasi tidak akan dikembalikan ke apa pun, meskipun itu bukan versi terakhir yang dikomit. Saya terkadang menggunakan ini untuk 'memilih ceri' file di antara revisi, jadi itu penting.
pengguna2864740
83
Seperti yang dikatakan djc, revertmengubah file di tempat agar cocok dengan revisi sebelumnya. Jika Anda ingin tidak ada, Anda dapat menggunakan hg cat -r revisionid filename(mengganti revisionid dan nama file tentunya) yang akan menampilkan file ke stdout, cocok untuk mengarahkan ke mana pun Anda mau.
Hebat, selalu menyenangkan mendengar hal seperti itu.
Ry4an Brase
24
hg revertmemang memecahkan masalah ini. Tetapi saya pikir Anda bingung tentang hal-hal yang lebih luas daripada sekadar jawaban atas pertanyaan Anda dan ingin mencoba menjawab dengan lebih lengkap.
hg updateadalah seluruh perintah repositori dan tidak akan berfungsi pada file individual. Ini tidak seperti subversi svn updatedengan cara ini. Jika Anda melakukannya, hg --help updateAnda dapat melihat bahwa hal ini terjadi karena perintah tidak memerlukan argumen file. Ini dapat digunakan untuk memindahkan seluruh repositori Anda ke snapshot tertentu, tetapi tidak dapat digunakan untuk melakukannya hanya ke satu file.
Jika Anda mengetik, hg --helpAnda akan melihat daftar perintah. Ini adalah daftar yang agak besar dan agak menakutkan, tetapi jika Anda membacanya, Anda akan menemukan baris ini:
revert restore individual files or directories to an earlier state
Sekarang, jika Anda hanya menginginkan status terakhir untuk tujuan perbandingan, ada perintah lain yang mungkin Anda minati, dan itu hg cat. Itu akan memungkinkan Anda untuk mencetak konten file pada revisi tertentu. Anda kemudian dapat mengarahkan outputnya ke beberapa file lain. Kemudian Anda dapat memiliki versi baik yang diketahui sebelumnya dari file Anda dan versi lama untuk dibandingkan secara berdampingan.
Alasan mengapa Mercurial memiliki updateperintah terpisah adalah dimungkinkan untuk melakukan sesuatu di Mercurial yang tidak mungkin dilakukan di Subversion. Anda bisa updateke versi sebelumnya, membuat perubahan, lalu melakukan. Ini akan membuat cabang. The updateperintah memiliki efek juga berubah revisi induk dari direktori kerja saat ini serta mengubah isi dari semua file dalam direktori untuk versi yang orang tua revisi ini.
Itu berarti revertmengubah konten file (atau bahkan seluruh repositori jika Anda memberikan perintah argumen yang benar) tetapi membiarkan revisi induk dari copy pekerjaan saat ini tetap sama.
Anda dapat mengetahui revisi induk (atau revisi dalam kasus penggabungan) dari copy pekerjaan saat ini dengan menggunakan hg parentsperintah.
Dalam revisi Subversion adalah perkembangan yang sangat linier. Mercurial menciptakan cabang dengan mudah, dan mereka hampir mudah untuk digabungkan. Revisi membentuk DAG, bukan progresi linier ketat.
Jawaban:
Saya pikir Anda mau
hg revert -r<rev> <file>
(ini akan mengubah file itu menjadi seperti pada revisi yang diberikan).sumber
Seperti yang dikatakan djc,
revert
mengubah file di tempat agar cocok dengan revisi sebelumnya. Jika Anda ingin tidak ada, Anda dapat menggunakanhg cat -r revisionid filename
(mengganti revisionid dan nama file tentunya) yang akan menampilkan file ke stdout, cocok untuk mengarahkan ke mana pun Anda mau.sumber
hg revert
memang memecahkan masalah ini. Tetapi saya pikir Anda bingung tentang hal-hal yang lebih luas daripada sekadar jawaban atas pertanyaan Anda dan ingin mencoba menjawab dengan lebih lengkap.hg update
adalah seluruh perintah repositori dan tidak akan berfungsi pada file individual. Ini tidak seperti subversisvn update
dengan cara ini. Jika Anda melakukannya,hg --help update
Anda dapat melihat bahwa hal ini terjadi karena perintah tidak memerlukan argumen file. Ini dapat digunakan untuk memindahkan seluruh repositori Anda ke snapshot tertentu, tetapi tidak dapat digunakan untuk melakukannya hanya ke satu file.Jika Anda mengetik,
hg --help
Anda akan melihat daftar perintah. Ini adalah daftar yang agak besar dan agak menakutkan, tetapi jika Anda membacanya, Anda akan menemukan baris ini:Sekarang, jika Anda hanya menginginkan status terakhir untuk tujuan perbandingan, ada perintah lain yang mungkin Anda minati, dan itu
hg cat
. Itu akan memungkinkan Anda untuk mencetak konten file pada revisi tertentu. Anda kemudian dapat mengarahkan outputnya ke beberapa file lain. Kemudian Anda dapat memiliki versi baik yang diketahui sebelumnya dari file Anda dan versi lama untuk dibandingkan secara berdampingan.Alasan mengapa Mercurial memiliki
update
perintah terpisah adalah dimungkinkan untuk melakukan sesuatu di Mercurial yang tidak mungkin dilakukan di Subversion. Anda bisaupdate
ke versi sebelumnya, membuat perubahan, lalu melakukan. Ini akan membuat cabang. Theupdate
perintah memiliki efek juga berubah revisi induk dari direktori kerja saat ini serta mengubah isi dari semua file dalam direktori untuk versi yang orang tua revisi ini.Itu berarti
revert
mengubah konten file (atau bahkan seluruh repositori jika Anda memberikan perintah argumen yang benar) tetapi membiarkan revisi induk dari copy pekerjaan saat ini tetap sama.Anda dapat mengetahui revisi induk (atau revisi dalam kasus penggabungan) dari copy pekerjaan saat ini dengan menggunakan
hg parents
perintah.Dalam revisi Subversion adalah perkembangan yang sangat linier. Mercurial menciptakan cabang dengan mudah, dan mereka hampir mudah untuk digabungkan. Revisi membentuk DAG, bukan progresi linier ketat.
sumber
Untuk mengekstrak revisi tertentu dari file tertentu, Anda dapat melakukan ini di Windows:
Di sini, 9 adalah nomor revisi.
Atau bahkan lebih baik:
sumber
Datang ke sini mencoba mendapatkan versi sebelumnya, jadi inilah perintah yang tepat:
sumber