Hướng dẫn · 17/10/2026

Git log --follow: Lần theo lịch sử file sau khi đổi tên

Bạn mở lịch sử một file hướng dẫn và chỉ thấy commit đổi tên gần đây, dù nội dung rõ ràng đã tồn tại từ lâu. Trước khi kết luận lịch sử bị mất, hãy thử Git log --follow. Đây là cách hữu ích để nối lại quá trình điều tra khi đường dẫn của một file thay đổi.

Git log --follow: Lần theo lịch sử file sau khi đổi tên

Bạn mở lịch sử một file hướng dẫn và chỉ thấy commit đổi tên gần đây, dù nội dung rõ ràng đã tồn tại từ lâu. Trước khi kết luận lịch sử bị mất, hãy thử Git log --follow. Đây là cách hữu ích để nối lại quá trình điều tra khi đường dẫn của một file thay đổi.

1. Bắt đầu với một file cụ thể

Chạy tại gốc repository và thay đường dẫn minh họa bằng file thực tế. Ví dụ, tài liệu trước đây tên setup.txt, nay được đổi thành onboarding.txt:

git --no-pager log --oneline HEAD -- onboarding.txt
git --no-pager log --follow --oneline HEAD -- onboarding.txt

Theo tài liệu Git log, --follow tiếp tục truy lịch sử qua các lần đổi tên và chỉ hỗ trợ một file mỗi lần. Không đưa cả danh sách file hoặc một thư mục vào rồi kỳ vọng nhận được lịch sử đổi tên đầy đủ cho tất cả.

2. Đọc dấu vết đổi tên

git --no-pager log --follow --name-status HEAD -- onboarding.txt

Trong một ví dụ đơn giản chỉ đổi tên, không sửa nội dung, bạn có thể thấy dòng tương tự:

R100    setup.txt    onboarding.txt

Hai đường dẫn giúp nhận ra tên cũ và tên mới. Trong bài kiểm thử với một commit tạo setup.txt và một commit đổi tên, lệnh có --follow trả về cả hai commit; truy vấn thông thường theo tên mới chỉ trả commit đổi tên.

Đừng chỉ đọc dòng trạng thái rồi kết luận về nghiệp vụ. Mục tiêu tiếp theo là tìm commit sửa nội dung, đọc thông điệp và đối chiếu yêu cầu hoặc bài kiểm thử liên quan.

3. Xem thay đổi nội dung trong cùng luồng

git --no-pager log --follow -p --no-ext-diff --no-textconv HEAD -- onboarding.txt

Lệnh này thêm phần patch để xem nội dung thay đổi. Hai tùy chọn cuối tắt external diff và text conversion cho lần đọc này. Với file dài, nên bắt đầu bằng danh sách commit ngắn gọn ở bước đầu, rồi chỉ đọc sâu khi đã xác định giai đoạn cần điều tra.

Nếu mở riêng một commit cũ bằng công cụ khác, nhớ dùng tên file tồn tại ở thời điểm đó. Tìm onboarding.txt trong commit chỉ có setup.txt có thể khiến bạn bỏ lỡ bằng chứng dù đã tìm đúng commit.

4. Những giới hạn cần nhớ

Git nhận diện đổi tên dựa trên việc so sánh nội dung, không phải một hồ sơ định danh bất biến cho từng file. Đổi tên đồng thời viết lại phần lớn nội dung có thể khó theo dõi hơn. Việc tách một file thành nhiều file hoặc nhập nhiều file thành một cũng cần kiểm tra thủ công các đường dẫn liên quan.

Danh sách ngắn chưa chắc là toàn bộ lịch sử cần biết. Hãy kiểm tra điểm bắt đầu HEAD, nhánh đang xem và việc clone có bị giới hạn lịch sử hay không. Với lịch sử nhiều nhánh và merge, đối chiếu thêm commit liên quan thay vì coi một truy vấn là bằng chứng đầy đủ.

5. Ghi lại kết luận có thể kiểm chứng

Một ghi chú điều tra tốt nêu rõ tên hiện tại, tên cũ, mã commit đổi tên và commit sửa nội dung đáng chú ý. Phân biệt điều quan sát được với suy đoán về lý do thay đổi; nếu chưa có issue hoặc tài liệu xác nhận, hãy ghi rõ điều đó.

Quy trình gọn nhất là chọn một file, xem danh sách với --follow, kiểm tra tên cũ và đọc patch cần thiết. Bạn có thể thực hiện các bước này mà không checkout phiên bản cũ hay sửa working tree.

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.