Tôi có một cam kết cũ mà tôi đã làm một vài tuần trước. Tôi muốn khôi phục chỉ một tệp duy nhất từ cam kết đó. Tôi làm gì?
Tôi có một cam kết cũ mà tôi đã làm một vài tuần trước. Tôi muốn khôi phục chỉ một tệp duy nhất từ cam kết đó. Tôi làm gì?
Câu trả lời:
git checkout 'master@{7 days ago}' -- path/to/file.txt
Điều này sẽ không thay đổi CHÍNH, nó sẽ ghi đè lên tệp cục bộ path/to/file.txt
Xem người đàn ông git-rev-parse để biết các thông số sửa đổi có thể có ở đó (tất nhiên một hàm băm đơn giản (như dd9bacb
) sẽ làm tốt
Đừng quên cam kết thay đổi (sau khi đánh giá ...)
revision-specification
vì đó là những gì OP yêu cầu :)
shacommit~1
(ví dụ git checkout 0f4bbdcd~1 -- path/to/file.txt
:) để nhận cam kết ngay trước đó.
git checkout [Revision_Key] -- path/to/file
.git checkout
có thể xử lý các tập tin đơn lẻ (xem câu trả lời của sehe), không cần sao chép và dán.
HEAD
, ORIG_HEAD
hoặc bất kỳ của những kết hợp với ^
/ ~
/ @
ký hiệu kiểu.
Tôi cần khôi phục một tập tin gần đây đã cam kết vào git. Vì vậy, chỉ cần nhắc lại và đưa ra một viễn cảnh khác, bạn cần thực hiện điều này bằng cách chạy hai bước sau:
git log -3
Điều này cho thấy ba lần xác nhận gần đây nhất. Đọc các bình luận và tên của tác giả để bạn thu hẹp phiên bản chính xác mà bạn muốn. Viết xuống id cam kết dài (tức là b6b94f2c19c456336d60b9409fb1e373036d3d71) cho phiên bản cam kết bạn muốn.
kiểm tra git b6b94f2c19c456336d60b9409fb1e373036d3d71 - myfile.java Truyền
id xác nhận VÀ tên tệp bạn muốn khôi phục. Hãy chắc chắn rằng bạn có một khoảng trắng trước và sau dấu gạch nối kép.
Có nhiều cách khác để làm điều đó. Nhưng cái này là cái đơn giản hơn tôi có thể nhớ. Mong rằng sẽ giúp.
LƯU Ý: Nếu bạn ở trong đường dẫn / thư mục dự án thì không cần thiết phải nhập đường dẫn của tệp đầy đủ trong lệnh thanh toán.
Tất cả các câu trả lời đề cập git checkout <tree-ish> -- <pathspec>
. Kể từ git v2.23.0, có một phương pháp khôi phục git mới được cho là đảm nhận một phần git checkout
trách nhiệm. Xem những điểm nổi bật của những thay đổi trên blog github .
Hành vi mặc định của lệnh này là khôi phục trạng thái của cây làm việc với nội dung đến từ source
tham số (trong trường hợp của bạn sẽ là hàm băm cam kết).
Giả sử hàm băm cam kết là abcdef
lệnh sẽ như thế này:
git restore --source=abcdef file_name
mà (theo mặc định) đặt nó trong cây làm việc. Nếu bạn muốn đặt thay đổi trực tiếp trong chỉ mục để có thể cam kết ngay lập tức:
git restore --source=abcdef --worktree --staged file_name
hoặc với tên tùy chọn ngắn:
git restore -s=abcdef -W -S file_name