Saya memiliki komitmen lama yang saya lakukan beberapa minggu yang lalu. Saya ingin mengembalikan hanya satu file dari komit itu. Apa yang saya lakukan?
git
git-checkout
Varun Achar
sumber
sumber
Jawaban:
Ini tidak akan mengubah HEAD, itu hanya akan menimpa file lokal
path/to/file.txt
Lihat man git-rev-parse untuk kemungkinan spesifikasi revisi di sana (tentu saja hash sederhana (seperti
dd9bacb
) akan bekerja dengan baik)Jangan lupa untuk melakukan perubahan (setelah ulasan ...)
sumber
revision-specification
karena itulah yang diminta OP :)shacommit~1
(mis .:)git checkout 0f4bbdcd~1 -- path/to/file.txt
untuk mendapatkan komit sebelumnya.git checkout [Revision_Key] -- path/to/file
.sumber
git checkout
dapat menangani file tunggal (lihat jawaban oleh sehe), tidak perlu menyalin dan menempel.HEAD
,ORIG_HEAD
atau salah satu dari mereka dikombinasikan dengan^
/~
/@
notasi-gaya.Saya perlu mengembalikan file terbaru yang dikomit ke git. Jadi hanya untuk mengulangi dan memberikan perspektif lain, Anda perlu melakukan ini dengan menjalankan dua langkah berikut:
git log -3
Ini menunjukkan tiga commit terakhir. Baca komentar dan nama penulis sehingga Anda mempersempit versi persis apa yang Anda inginkan. Tuliskan id komit yang panjang (yaitu b6b94f2c19c456336d60b9409fb1e373036d3d71) untuk versi komit yang Anda inginkan.
git checkout b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java
Lulus id komit DAN nama file yang ingin Anda pulihkan. Pastikan Anda memiliki ruang sebelum dan sesudah tanda hubung ganda.
Ada banyak cara lain untuk melakukannya. Tapi yang ini lebih sederhana yang bisa kuingat. Semoga itu bisa membantu.
CATATAN: Jika Anda berada di dalam jalur / folder proyek Anda, maka tidak perlu mengetikkan path file lengkap dalam perintah checkout.
sumber
Semua jawaban menyebutkan
git checkout <tree-ish> -- <pathspec>
. Pada git v2.23.0 ada metode git restore baru yang seharusnya mengambil bagian dari apagit checkout
yang bertanggung jawab. Lihat sorotan perubahan di blog github .Perilaku default dari perintah ini adalah mengembalikan status pohon yang berfungsi dengan konten yang berasal dari
source
parameter (yang dalam kasus Anda akan menjadi hash komit).Dengan asumsi hash komit adalah
abcdef
perintah akan terlihat seperti ini:yang (secara default) meletakkannya di pohon kerja. Jika Anda ingin memasukkan perubahan secara langsung ke dalam indeks sehingga dapat dilakukan langsung:
atau dengan nama opsi pendek:
sumber