Saya ingin mengembalikan perubahan yang dibuat oleh komit tertentu ke file tertentu saja.
Bisakah saya menggunakan perintah git revert untuk itu?
Adakah cara sederhana lainnya untuk melakukannya?
git
version-control
revert
Lakshman Prasad
sumber
sumber
Jawaban:
Cara terbersih yang pernah saya lakukan untuk melakukan ini dijelaskan di sini
Mirip dengan respon VonC tetapi menggunakan
git show
dangit apply
.sumber
fatal: unrecognized input
-3
bendera ke git apply for three-way merge ketika tambalan gagal, karena saya biasanya mengoreksi perubahan sedikit ke masa lalu.some_file.c
menyertakan jalur ke file jika ada, jika tidak, Anda akan diam-diam tidak menambal apa pun :)Dengan asumsi tidak masalah untuk mengubah riwayat komit, berikut adalah alur kerja untuk mengembalikan perubahan dalam satu file dalam komit sebelumnya:
Misalnya, Anda ingin mengembalikan perubahan dalam 1 file (
badfile.txt
) di komitaaa222
:Basis pada basis commit, ubah masalah commit, & lanjutkan.
1) Mulai rebase interaktif:
2) Tandai masalah komit untuk diedit di editor dengan mengubah
pick
kee
(untuk edit):3) Kembalikan perubahan ke file buruk:
4) Tambahkan perubahan & ubah komit:
5) Selesaikan rebase:
sumber
edit
tidak muncul sebagai berubah. Tapigit show -- badfile.txt | git apply -R
memberikan jawaban yang saya butuhkan <3git revert
adalah untuk semua konten file dalam komit.Untuk satu file, Anda bisa skrip :
(Dari utilitas git-shell-scripts dari smtlaissezfaire )
catatan:
cara lain dijelaskan di sini jika Anda belum melakukan modifikasi Anda saat ini.
git checkout
memiliki beberapa opsi untuk sebuah file, memodifikasi file dari HEAD, menimpa perubahan Anda.Dropped.on.Caprica menyebutkan di komentar :
sumber
git revert-file <hash> <file-loc>
dan mengembalikan file spesifik tersebut. Saya angkat dari jawaban ini (meskipun saya harus membuat beberapa pengeditan agar berfungsi dengan benar). Anda dapat menemukan salinan.gitconfig
skrip saya dan yang telah diedit di sini: gist.github.com/droppedoncaprica/5b67ec0021371a0ad438Saya hanya akan menggunakan
--no-commit
opsi untukgit-revert
dan kemudian menghapus file yang tidak ingin Anda kembalikan dari indeks sebelum akhirnya melakukannya. Berikut adalah contoh yang menunjukkan bagaimana dengan mudah mengembalikan hanya perubahan ke foo.c di komit terbaru kedua:Yang pertama
git-reset
"menghapus" semua file, sehingga kita dapat menambahkan kembali hanya satu file yang ingin kita kembalikan. Yang terakhirgit-reset --hard
menghilangkan sisa file yang tidak ingin kita simpan.sumber
Jauh lebih sederhana:
kemudian
lalu
file hilang dan komit hash, pesan, dll sama.
sumber
git checkout -- path/to/file/to/revert
langkah? Juga, tidak benar bahwa hashnya sama setelahnya, bukan? Kalimat terakhir mungkin lebih baik seperti ini: "Hasilnya adalah komit terakhir diganti dengan yang baru yang hanya berbeda karena tidak berisi perubahan pada file yang dikembalikan."Perintah di atas akan mengeluarkan file dari komit, tetapi akan tercermin dalam
git status
.Perintah di atas akan mengembalikan perubahan (sebagai hasilnya Anda mendapatkan file yang sama dengan HEAD).
(Lulus
--amend
untuk mengubah komit.)Dengan ini, file yang sudah di komit dihapus dan dikembalikan.
Langkah-langkah di atas harus diikuti dari cabang tempat komit dibuat.
sumber
Anda dapat mengikuti prosedur ini:
git revert -n <*commit*>
(-n
kembalikan semua perubahan tetapi tidak akan melakukannya)git add <*filename*>
(nama file yang ingin Anda kembalikan & komit)git commit -m 'reverted message'
(tambahkan pesan untuk kembali)sumber
Jika Anda ingin menyetel ulang perubahan pada file dari pengubahan terakhir Anda, inilah yang biasanya saya gunakan. Saya rasa ini adalah solusi paling sederhana.
Harap perhatikan bahwa file akan ditambahkan ke area pementasan.
Semoga membantu :)
sumber