Dalam repo git saya yang melacak repo svn saya telah membuat sejumlah pengeditan untuk satu file.
Sekarang saya ingin mengembalikan perubahan itu (seperti svn revert), tetapi hanya sebagian file.
Saya ingin dapat melihat perbedaan pada file, membuang (mengembalikan) perubahan yang tidak saya inginkan dan menyimpan perubahan yang saya inginkan.
itu
git add -i
Perintah tampaknya memiliki opsi untuk melakukan itu, tetapi saya belum ingin melakukan ini.
sumber
Saya percaya Anda dapat melakukannya paling sederhana dengan:
Dari halaman manual:
sumber
a
opsi dalam mode tambalan untuk membuang seluruh file, namungit checkout -- <file>
berfungsi seperti yang diharapkan. Adakah yang tahu kenapa?Anda dapat menjalankan
git diff
pada file, menyimpan diff yang dihasilkan, mengeditnya untuk menghapus perubahan yang ingin Anda simpan, kemudian jalankan melaluipatch -R
untuk membatalkan diff yang tersisa.sumber
git diff
menunjukkan seluruh file berubah. Ini biasanya terjadi ketika Anda menyimpan file menggunakan akhiran baris yang berbeda dari sebelumnya. Ini juga akan menyebabkanpatch
menolak file tambalan. Apakah itu terdengar seperti apa yang mungkin terjadi?Sepertinya kamu mau
Anda kemudian dapat menggunakan
untuk melihat perubahan apa yang akan dilakukan sebelum melakukan (karena mengembalikan hanyalah komit ke arah depan yang mereplikasi kebalikan dari perubahan di masa lalu)
Jika Anda menggunakan repositori Git murni, Anda bisa, tergantung pada tujuan Anda, menggunakan rebase interaktif (
git rebase -i
) untuk kembali ke komit yang tidak Anda sukai dan mengedit komit secara surut sehingga perubahan yang tidak Anda sukai tidak pernah terjadi , tapi itu umumnya hanya karena jika Anda TAHU Anda tidak akan pernah ingin melihatnya lagi.sumber
Membaca ulang pertanyaan itu, sepertinya Anda ingin mengembalikan perubahan yang ada di pohon kerja Anda dan bukan perubahan yang telah dilakukan sebelumnya tetapi beberapa jawaban lain membuatnya terdengar seperti bacaan saya mungkin salah. Bisakah Anda mengklarifikasi?
Jika perubahan hanya ada di copy pekerjaan Anda, maka cara termudah untuk melakukannya adalah dengan membuat perubahan yang ingin Anda pertahankan:
Kemudian buang perubahan yang tidak ingin Anda pertahankan dengan memeriksa versi indeks:
Kemudian hapus tahapan perubahan jika Anda belum menginginkannya dipentaskan:
Resep ini hanya mengembalikan perubahan yang dipilih ke file (atau file yang Anda tentukan) dan tidak membuat komit sementara yang membutuhkan reverting.
Jika Anda ingin secara selektif menerapkan hanya beberapa perubahan yang dilakukan pada komit sebelumnya maka Anda dapat mengatur ulang file ke status komitmen sebelumnya terlebih dahulu:
Kemudian Anda dapat mengikuti resep sebelumnya untuk mem
git add -i <file>
-stage perubahan yang ingin Anda simpan,git checkout -- <file>
untuk membuang perubahan yang tidak diinginkan dangit reset -- <file>
untuk 'unstage' perubahan.sumber
Opsi baris perintah yang dijelaskan dalam jawaban di sini berguna ketika file ada di server yang saya akses melalui terminal ssh. Namun, ketika file ada di mesin lokal saya, saya lebih suka cara berikut:
Buka file di editor netbeans (yang dilengkapi dengan dukungan git). Netbeans menempatkan tanda merah / hijau / biru pada nomor baris untuk menunjukkan di mana barang dihapus / ditambahkan / dimodifikasi (masing-masing).
Mengklik kanan salah satu dari tanda-tanda ini memberi Anda opsi untuk membatalkan perubahan itu. Selain itu, Anda dapat mengeklik kanan tanda merah dan biru untuk menemukan versi lama di sembulan.
sumber