Bạn đang điều tra một dòng tài liệu cũ, nhưng git log của đường dẫn hiện tại chỉ cho thấy vài commit gần đây. File có thể từng mang tên khác. Trước khi kết luận phần lịch sử trước đó đã mất, thử đọc log với tùy chọn follow dành cho một file.
Bài dùng Git 2.54.0, đối chiếu tài liệu ngày 10/11/2026. Fixture chạy trong repository tạm mới tạo, không sửa checkout làm việc, không fetch hoặc push. Ví dụ dùng lịch sử tuyến tính với một lần đổi tên nguyên nội dung, chưa kiểm tra merge hoặc các trường hợp đổi tên đồng thời sửa nhiều phần.
Dựng một lịch sử có thể tự đối chiếu
Chạy trong Bash. Mọi lệnh Git đều chỉ rõ repository tạm vừa tạo:
set -eu
demo_repo=$(mktemp -d /tmp/aedev-follow-demo.XXXXXX)
git init -q --template= "$demo_repo"
git -C "$demo_repo" config user.name 'AeDev Demo'
git -C "$demo_repo" config user.email '[email protected]'
git -C "$demo_repo" config commit.gpgsign false
git -C "$demo_repo" config core.hooksPath /dev/null
mkdir "$demo_repo/docs"
printf 'intro\nusage\nfaq\n' > "$demo_repo/docs/guide.txt"
git -C "$demo_repo" add docs/guide.txt
git -C "$demo_repo" commit -qm 'Create guide'
git -C "$demo_repo" mv docs/guide.txt docs/manual.txt
git -C "$demo_repo" commit -qm 'Rename guide to manual'
printf 'troubleshooting\n' >> "$demo_repo/docs/manual.txt"
git -C "$demo_repo" add docs/manual.txt
git -C "$demo_repo" commit -qm 'Extend manual'
printf 'Demo repository: %s\n' "$demo_repo"
Ba message mô tả rõ từng thay đổi để dễ đọc output. Commit đầu tạo guide.txt, commit thứ hai đổi thành manual.txt mà chưa sửa nội dung, commit thứ ba thêm một dòng. Hash và thời gian commit sẽ khác ở lần chạy khác; các kiểm tra trong bài dựa trên thứ tự và nội dung.
So hai cách xem log của tên hiện tại
Chạy tiếp trong cùng shell:
printf 'Current path only\n'
git -C "$demo_repo" -c log.follow=false log --format=%s -- docs/manual.txt
printf 'Follow the file\n'
git -C "$demo_repo" log --follow --format=%s -- docs/manual.txt
test -z "$(git -C "$demo_repo" status --porcelain)"
Lần đầu liệt kê Extend manual và Rename guide to manual. Lần có follow liệt kê thêm Create guide ở cuối. Working tree vẫn sạch vì các lệnh xem log không chỉnh file. -c log.follow=false ở phép so đầu làm rõ rằng nó không chịu cấu hình tự bật follow của người dùng.
git-log mô tả follow là cách tiếp tục lịch sử qua lần đổi tên và chỉ hỗ trợ một file. Dấu -- phân cách tùy chọn với đường dẫn, giúp ý định truy vấn dễ đọc, nhất là khi tên file có thể giống một tên revision.
Chọn câu hỏi trước khi thêm tùy chọn
Log theo đường dẫn hiện tại trả lời câu hỏi về các commit tác động đến tên đang xét trong phạm vi lịch sử được chọn. Follow hữu ích khi câu hỏi là “file này có phần trước dưới tên nào?”. Nó không thay đổi commit hoặc tạo ra lịch sử mới; bạn đang thay cách duyệt dữ liệu đã có.
Khi cần đọc bản thân thay đổi, có thể bổ sung định dạng diff phù hợp sau khi đã xác định commit. Đừng chỉ nhìn số dòng log mà kết luận một dòng code cụ thể xuất hiện từ đâu. Ví dụ hiện tại kiểm tra danh sách commit, không cung cấp một quy trình blame hoặc parser log tổng quát.
Đổi tên không phải một định danh file bất biến
Việc nối lịch sử phụ thuộc khả năng nhận diện đổi tên của Git và phạm vi lịch sử đang xem. Fixture dùng lần đổi tên nguyên nội dung để tín hiệu rõ ràng. Nếu một commit vừa chuyển file vừa viết lại phần lớn nội dung, kết quả điều tra có thể cần xem thêm diff và các tùy chọn nhận diện liên quan.
Không truyền cả một thư mục hoặc nhiều file rồi mong follow tự dựng đầy đủ mọi quan hệ đổi tên. Tài liệu giới hạn tùy chọn này ở một file. Với lịch sử merge phức tạp, cần đọc thêm quy tắc đơn giản hóa lịch sử; bài không chứng minh kết quả cho mọi hình dạng commit graph.
Kiểm tra khi áp dụng vào repository thật
Xác nhận đường dẫn hiện tại đúng và branch đang xem chứa lịch sử cần điều tra. Xem cả log thường và follow, ghi lại commit đổi tên, rồi kiểm tra nội dung tại các commit liên quan. Nếu repository chỉ có lịch sử tải về một phần, đừng mặc định mọi commit xa hơn đã có ở local.
Bạn có thể thực hành thêm bằng cách đổi message hoặc thêm một commit không liên quan rồi xem nó có xuất hiện trong log của file không. Giữ câu hỏi hẹp giúp output dễ kiểm chứng: follow tiếp nối lịch sử của một file qua đổi tên, chứ không thay thế mọi công cụ điều tra lịch sử của Git.

