Để hoàn thành câu trả lời của riêng bạn, cú pháp thực sự là
git show object
git show $REV:$FILE
git show somebranch:from/the/root/myfile.txt
git show HEAD^^^:test/test.py
Lệnh lấy kiểu sửa đổi thông thường, nghĩa là bạn có thể sử dụng bất kỳ thao tác nào sau đây:
- tên chi nhánh (theo gợi ý của tro )
HEAD
+ x số ^
ký tự
- Hàm băm SHA1 của một sửa đổi đã cho
- Một vài ký tự đầu tiên (có thể là 5) của hàm băm SHA1 đã cho
Mẹo Điều quan trọng cần nhớ là khi sử dụng " git show
", luôn chỉ định đường dẫn từ thư mục gốc của kho lưu trữ , không phải vị trí thư mục hiện tại của bạn.
(Mặc dù Mike Morearty đề cập rằng, ít nhất là với git 1.7.5.4, bạn có thể chỉ định một đường dẫn tương đối bằng cách đặt " ./
" ở đầu đường dẫn - ví dụ:
git show HEAD^^:./test.py
)
Với Git 2.23+ (tháng 8 năm 2019), bạn cũng có thể sử dụng git restore
thay thế lệnh khó hiểugit checkout
git restore -s <SHA1> -- afile
git restore -s somebranch -- afile
Điều đó sẽ khôi phục trên cây làm việc chỉ tập tin như trong "nguồn" ( -s
) cam kết SHA1 hoặc nhánh somebranch
.
Để khôi phục lại chỉ mục:
git restore -s <SHA1> -SW -- afile
( -SW
: viết tắt của --staged --worktree
)
Trước git1.5.x, điều đó đã được thực hiện với một số hệ thống ống nước:
git ls-tree <rev>
hiển thị danh sách một hoặc nhiều đối tượng 'blob' trong một cam kết
git cat-file blob <file-SHA1>
cat một tập tin như nó đã được cam kết trong một phiên bản cụ thể (tương tự như mèo svn). sử dụng git ls-tree để lấy giá trị của tệp đã cho-sha1
git cat-file -p $(git-ls-tree $REV $file | cut -d " " -f 3 | cut -f 1)::
git-ls-tree liệt kê ID đối tượng cho tệp $ trong bản sửa đổi $ REV, phần này bị cắt ra khỏi đầu ra và được sử dụng làm đối số cho tệp git-cat-, thực sự nên được gọi là git-cat-object và chỉ đơn giản là kết xuất đối tượng đó đến stdout.
Lưu ý: kể từ Git 2.11 (Q4 2016), bạn có thể áp dụng bộ lọc nội dung cho git cat-file
đầu ra!
Xem cam kết 3214594 , cam kết 7bcf341 (09 tháng 9 năm 2016), cam kết 7bcf341 (09 tháng 9 năm 2016) và cam kết b9e62f6 , cam kết 16dcc29 (24 tháng 8 năm 2016) của Johannes Schindelin ( dscho
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết 7889ed2 , ngày 21 tháng 9 năm 2016)
cat-file
: hỗ trợ --textconv
/ --filters
trong chế độ hàng loạt
Mặc dù " git hash-objects
", là công cụ lấy luồng dữ liệu trên hệ thống tệp và đưa nó vào kho đối tượng Git, được phép thực hiện chuyển đổi "ngoài thế giới sang Git" (ví dụ: chuyển đổi và ứng dụng cuối dòng của bộ lọc sạch) và mặc định nó có tính năng bật từ rất sớm, hoạt động ngược của nó " git cat-file
", lấy một đối tượng từ kho đối tượng Git và đưa ra ngoài để tiêu thụ bởi thế giới bên ngoài, thiếu một cơ chế tương đương để chạy "Git-to-bên ngoài thế giới"
git config diff.txt.textconv "tr A-Za-z N-ZA-Mn-za-m <"
git cat-file --textconv --batch
Lưu ý: " git cat-file --textconv
" đã bắt đầu segfaulting gần đây (2017), đã được sửa trong Git 2.15 (Q4 2017)
Xem cam kết cc0ea7c (ngày 21 tháng 9 năm 2017) của Jeff King ( peff
) .
(Được hợp nhất bởi Junio C Hamano - gitster
- trong cam kết bfbc2fc , ngày 28 tháng 9 năm 2017)
Lưu ý rằng để ghi đè / thay thế tệp bằng nội dung trong quá khứ, bạn không nên sử dụng lệnh khó hiểugit checkout
nữa, nhưng git restore
(Git 2.23+, tháng 8 năm 2019)
git restore -s <SHA1> -- afile
Điều đó sẽ khôi phục trên cây làm việc chỉ tập tin như hiện diện trong "nguồn" ( -s
) cam kết SHA1.
Để khôi phục lại chỉ mục:
git restore -s <SHA1> -SW -- afile
( -SW
: viết tắt của --staged --worktree
)
git show
(không hữu ích) sử dụng cú pháp khác nhau với dấu hai chấm.git show 2c7cf:my_file.txt