Hướng dẫn · 25/09/2026

Git show: Đọc phiên bản cũ của file mà không đổi nhánh

Khi điều tra một lỗi, bạn có thể chỉ cần đọc file ở phiên bản trước, không cần chuyển cả repository về commit cũ. Git show giúp xem nội dung đã lưu trong Git ngay tại terminal, trong khi các chỉnh sửa đang làm vẫn nằm nguyên trong working tree.

Git show: Đọc phiên bản cũ của file mà không đổi nhánh

Khi điều tra một lỗi, bạn có thể chỉ cần đọc file ở phiên bản trước, không cần chuyển cả repository về commit cũ. Git show giúp xem nội dung đã lưu trong Git ngay tại terminal, trong khi các chỉnh sửa đang làm vẫn nằm nguyên trong working tree.

1. Xem commit và xem file là hai yêu cầu khác nhau

Theo tài liệu Git show, lệnh có thể hiển thị nhiều loại đối tượng. Với commit, bạn thường thấy thông tin commit và phần thay đổi; với blob của file, bạn thấy nội dung file.

git show --stat HEAD
git show HEAD:src/Example.php

Lệnh đầu cho cái nhìn tổng quan về commit hiện tại. Lệnh thứ hai đọc toàn bộ phiên bản đã commit của file minh họa. Thay src/Example.php bằng đường dẫn thật tính từ gốc repository. Repository cần có commit và file phải tồn tại trong commit đang xem.

2. Xem phiên bản trước mà không checkout

git show "HEAD~1:src/Example.php"

HEAD~1 chỉ cha thứ nhất của commit hiện tại; repository chỉ có commit đầu tiên sẽ không có phiên bản này. Nó không có nghĩa là “lần sửa file gần nhất”. Nếu commit trước không sửa file đó, bạn vẫn có thể thấy cùng nội dung.

Có thể thay HEAD~1 bằng mã commit đã xác định. Đặt toàn bộ biểu thức trong dấu nháy nếu đường dẫn chứa khoảng trắng. Hãy kiểm tra thông tin commit để chắc chắn đang đọc đúng mốc, đặc biệt khi lịch sử có merge.

3. Phân biệt bản đã commit và bản đang sửa

Giả sử bạn vừa sửa một điều kiện trong editor nhưng chưa commit. git show HEAD:src/Example.php vẫn đọc bản trong HEAD, không phải nội dung mới trong editor hay phiên bản vừa stage. Đây chính là lý do lệnh hữu ích để đối chiếu.

git status --short
git diff HEAD -- src/Example.php

Với file đã được theo dõi, diff trên so sánh bản trong HEAD với working tree. Nếu muốn phân biệt phần đã stage và chưa stage, dùng riêng git diff --cached và git diff. Không kết luận file “chưa đổi” chỉ vì đang nhìn bản HEAD.

4. Khi Git báo không tìm thấy đường dẫn

  • Kiểm tra đúng chữ hoa/chữ thường và đường dẫn từ gốc repository.
  • File có thể chưa tồn tại ở commit đã chọn.
  • File có thể mang tên khác trước một lần đổi tên.
  • File mới chưa được commit không có nội dung trong HEAD để đọc.

Không vội dùng restore hoặc reset để giải quyết lỗi đọc. Hãy xác định lại commit và tên file tại thời điểm đó. Với dữ liệu nhị phân, đừng in trực tiếp ra terminal; chọn công cụ xem phù hợp và quy trình trích xuất riêng nếu thực sự cần.

5. Giữ thao tác chỉ đọc

Các ví dụ git show ở đây không chuyển nhánh, thay index hay ghi đè working tree. Nhưng nếu tự thêm chuyển hướng > vào một file hiện có, shell có thể ghi đè file đó. Muốn lưu bản cũ ra đĩa, hãy chọn tên mới và xác minh đích trước.

Nội dung lịch sử cũng có thể chứa dữ liệu nhạy cảm. Không chia sẻ nguyên output chỉ vì nó đến từ một commit cũ. Đọc đúng phiên bản trước, xác định nguyên nhân rồi mới quyết định có cần khôi phục hoặc sửa mã hay không.

Thảo luận

Bình luận 0

Đăng nhập để bình luận

Bạn cần có tài khoản để tham gia thảo luận và trả lời độc giả khác.

Đăng nhậpĐăng ký

Chưa có bình luận. Hãy là người đầu tiên chia sẻ ý kiến.