Làm cách nào để kiểm tra phiên bản cụ thể của một tệp trong Git?


87

Làm cách nào để kiểm tra phiên bản cụ thể của một tệp trong git?

Tôi tìm thấy thư này trong danh sách gửi thư , cho biết:

$ git checkout HEAD~43 Makefile
$ git reset Makefile

Nhưng tôi không hiểu làm thế nào để tìm ra 'HEAD ~ 43', nếu tôi làm vậy git log aFile, làm thế nào tôi có thể tìm ra 'HEAD ~ 43' mà tôi nên sử dụng?

Và tại sao tôi cần chạy git resetcho tệp đó? Nó làm gì?


"git reset <commit> <file>" hoạt động giống hệt như "git checkout <commit> <file>".
Jakub Narębski

2
Nếu câu hỏi của bạn là về cú pháp HEAD ~ 43 (được ghi lại bằng git-rev-parse), hãy hỏi về vấn đề này, không hỏi về vấn đề không liên quan mà bạn biết câu trả lời. "Gì ĐẦU ~ 45 trung bình, và làm thế nào để tìm phiên bản đặc biệt của tập tin"
Jakub Narębski

theo lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/…lt.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git- reset.html , "git reset <commit> <file>" không hoạt động hoàn toàn giống như "git checkout <commit> <file>": "git reset <commit> <file>" hoàn nguyên <file> trong chỉ mục từ <commit> mà không chạm vào <file> trong cây làm việc, nhưng "git checkout <commit> <file>" cập nhật chỉ mục cho <file> từ <commit> và sau đó cập nhật <file> trong cây làm việc.
yoda

2
Nếu bất kỳ câu trả lời nào bên dưới trả lời cho câu hỏi của bạn, theo cách hoạt động của Stack Overflow, bạn "chấp nhận" câu trả lời bằng cách nhấp vào dấu kiểm bên cạnh nó; chi tiết tại đây . Nhưng chỉ khi câu hỏi của bạn được trả lời; nếu không, hãy cân nhắc thêm chi tiết vào câu hỏi và / hoặc nhận xét về câu trả lời cho biết điều gì chưa rõ ràng (chưa rõ).
TJ Crowder

Câu trả lời:


104

Bạn biết tệp thuộc về cam kết nào (tức là: bản sửa đổi cụ thể) không? Sau đó làm:

git checkout <commit> <file>

Lệnh khác:

git checkout HEAD~N <file>

Dành cho khi bạn muốn lấy một phiên bản của tệp từ một phạm vi trở lại (mà tôi làm vì nỗi nhớ).


19

HEAD~43chỉ là cây cối, vì vậy bạn có thể sử dụng băm hoặc thẻ. Bạn phải tách treeish khỏi tên tệp bằng --, nếu không nó được coi là tên tệp. Ví dụ.

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename

2

HEAD~43đề cập đến cam kết (phiên bản) của tệp. Thay vào đó, bạn có thể sử dụng mã băm cam kết mà bạn nhận được từ việc thực hiện git logtrên tệp. Nếu bạn chỉ muốn tệp, bạn không cần phải chạy git resettrên nó; điều đó chỉ cần thiết nếu bạn muốn chuyển tiếp tệp đến HEAD hiện tại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.