Saya memiliki komitmen lama yang saya lakukan beberapa minggu yang lalu. Saya ingin mengembalikan hanya satu file dari komit itu. Apa yang saya lakukan?
Saya memiliki komitmen lama yang saya lakukan beberapa minggu yang lalu. Saya ingin mengembalikan hanya satu file dari komit itu. Apa yang saya lakukan?
Jawaban:
git checkout 'master@{7 days ago}' -- path/to/file.txt
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 ...)
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
.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.
Semua jawaban menyebutkan git checkout <tree-ish> -- <pathspec>
. Pada git v2.23.0 ada metode git restore baru yang seharusnya mengambil bagian dari apa git 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:
git restore --source=abcdef file_name
yang (secara default) meletakkannya di pohon kerja. Jika Anda ingin memasukkan perubahan secara langsung ke dalam indeks sehingga dapat dilakukan langsung:
git restore --source=abcdef --worktree --staged file_name
atau dengan nama opsi pendek:
git restore -s=abcdef -W -S file_name