Bagaimana saya bisa kembali ke komit tertentu git ?
Jawaban terbaik yang bisa diberikan seseorang kepada saya adalah menggunakan git revert
X kali sampai saya mencapai komit yang diinginkan.
Jadi katakanlah saya ingin kembali ke komit yang berumur 20 komit, saya harus menjalankannya 20 kali.
Adakah cara yang lebih mudah untuk melakukan ini?
Saya tidak dapat menggunakan reset karena repositori ini bersifat publik.
git
git-checkout
git-revert
David
sumber
sumber
Jawaban:
Coba ini:
di mana
[revision]
hash komit (misalnya12345678901234567890123456789012345678ab
:).Jangan lupa
.
pada akhirnya, sangat penting. Ini akan menerapkan perubahan pada keseluruhan pohon. Anda harus menjalankan perintah ini di root proyek git. Jika Anda berada di sub direktori, maka perintah ini hanya mengubah file dalam direktori saat ini. Kalau begitu komit dan Anda harus baik.Anda dapat membatalkan ini dengan
yang akan menghapus semua modifikasi dari direktori kerja dan area pementasan.
sumber
Untuk mengembalikan ke komit tertentu:
Untuk mengembalikan 10 komit kembali:
Anda dapat menggunakan "git revert" seperti pada posting berikut jika Anda tidak ingin menulis ulang sejarah
Bagaimana cara mengembalikan repositori Git ke komit sebelumnya?
sumber
Yah, saya kira pertanyaannya adalah, apa yang Anda maksud dengan 'mundur'? Jika Anda tidak bisa
reset
karena itu bersifat publik dan Anda ingin menjaga riwayat komit tetap utuh, maksud Anda hanya ingin copy pekerjaan Anda mencerminkan komit tertentu? Gunakangit checkout
dan hash komit.Sunting: Seperti yang ditunjukkan dalam komentar, menggunakan
git checkout
tanpa menentukan cabang akan membuat Anda dalam keadaan "tidak ada cabang". Gunakangit checkout <commit> -b <branchname>
untuk checkout ke cabang, ataugit checkout <commit> .
untuk checkout ke cabang saat ini.sumber
git checkout
- dia bebas untuk memeriksa cabang apa saja (saat ini atau baru) yang dia inginkan. Saya akan memperbarui jawaban saya sehingga tidak ambigu.git reset
menghapus file-file itu, yang Anda katakan tidak ingin Anda lakukan. Coba lakukan ke cabang terpisah:,git checkout <commit> -b <branchname>
Anda tidak akan memiliki file stagnan di cabang itu .checkout
adalah bahwa itu tidak akan menghapus file yang ditambahkan dalam komit sebelumnya.Poster asli menyatakan:
Tidak perlu menggunakan
git revert
X kali.git revert
dapat menerima rentang komit sebagai argumen, jadi Anda hanya perlu menggunakannya sekali untuk mengembalikan rentang komit. Misalnya, jika Anda ingin mengembalikan 20 komit terakhir:Rentang komit
HEAD~20..
adalah kependekan dariHEAD~20..HEAD
, dan berarti "mulai dari induk ke- 20 dari komit HEAD, dan kembalikan semua komit setelah hingga HEAD".Itu akan mengembalikan 20 komit terakhir, dengan asumsi bahwa tidak ada dari mereka yang menggabungkan komit. Jika ada gabungan komit, maka Anda tidak bisa mengembalikan semuanya dalam satu perintah, Anda harus mengembalikannya secara individual
Perhatikan juga bahwa saya telah menguji menggunakan rentang dengan
git revert
menggunakan git versi 1.9.0. Jika Anda menggunakan versi git yang lebih lama, menggunakan rentang dengangit revert
mungkin atau mungkin tidak berfungsi.Dalam hal ini,
git revert
lebih disukai daripadagit checkout
.Perhatikan bahwa tidak seperti jawaban ini yang mengatakan untuk digunakan
git checkout
,git revert
sebenarnya akan menghapus file apa pun yang ditambahkan di salah satu komit yang Anda kembalikan, yang menjadikan ini cara yang benar untuk mengembalikan serangkaian revisi.Dokumentasi
sumber
Langkah 1: ambil daftar komitmen:
Anda akan mendapatkan daftar seperti dalam contoh ini:
Langkah 2: salin hash komit yang diperlukan dan tempel untuk checkout:
Itu saja.
sumber
akan melakukannya. Ini "checkout git" tetapi tanpa memperbarui KEPALA.
Anda dapat mencapai efek yang sama dengannya
jika Anda lebih suka merangkai perintah kenyamanan bersama.
Ini meninggalkan Anda dengan pohon kerja Anda dan indeks dalam keadaan yang diinginkan, Anda bisa
git commit
menyelesaikannya.sumber
Ingin mode HEAD terlepas?
Jika Anda ingin mengembalikan X kali ke komit tertentu dengan HEAD DETACHED (berarti Anda tidak dapat mengacaukan apa pun), maka dengan segala cara, gunakan yang berikut:
(ganti X dengan berapa banyak komit yang ingin Anda kembalikan)
IE untuk kembali satu komit:
sumber
Katakanlah Anda mengerjakan sebuah proyek dan setelah sekitar satu hari atau lebih. Anda perhatikan satu fitur masih memberi Anda kesalahan. Tapi Anda tidak tahu perubahan apa yang Anda lakukan yang menyebabkan kesalahan. Jadi, Anda harus memancing komitmen kerja sebelumnya. Untuk kembali ke komitmen tertentu:
Oke, jadi commit itu berfungsi untuk Anda. Tidak ada lagi kesalahan. Anda menunjukkan masalah dengan tepat. Sekarang Anda dapat kembali ke komit terbaru:
Dan checkout file tertentu sebelum menyebabkan kesalahan (dalam kasus saya, saya menggunakan contoh Gemfile.lock):
Dan ini adalah salah satu cara untuk menangani kesalahan yang Anda buat di komit tanpa menyadari kesalahan sampai nanti.
sumber
Anda dapat menemukan id komit yang terkait dengan setiap komit di bagian komit di GitHub / BitBucket / Gitlab. Ini sangat sederhana, misalkan komit id Anda adalah 5889575 maka jika Anda ingin kembali ke bagian ini dalam kode Anda, maka Anda hanya perlu mengetik
Ini akan membawa Anda ke titik waktu dalam kode Anda.
sumber
Saya tidak yakin apa yang berubah, tetapi saya tidak dapat checkout komit tertentu tanpa opsi
--detach
. Perintah lengkap yang bekerja untuk saya adalah:git checkout --detach [commit hash]
Untuk kembali dari keadaan terpisah saya harus checkout cabang lokal saya:
git checkout master
sumber
master
menyelesaikan masalah tetap terpisah, saat melakukangit reset --hard
ataugit checkout -- .
memang bekerja tetapi tetap terpisahIni adalah contoh untuk melakukan itu
sumber