Bạn nhớ dự án từng có một cấu hình nhưng tìm trong mã hiện tại không còn thấy. Thay vì mở từng commit, có thể tìm những thay đổi liên quan đến chuỗi đó bằng git log -S hoặc -G. Hai tùy chọn trả lời hai câu hỏi khác nhau, nên cần chọn theo điều muốn điều tra.
1. Tìm commit làm thay đổi số lần xuất hiện
Ví dụ dùng tên cấu hình giả định RETRY_LIMIT và thư mục src. Chạy từ gốc repository, thay bằng dữ liệu thật của dự án. Các lệnh chỉ đọc lịch sử.
git log --oneline -S 'RETRY_LIMIT' -- src/
git log -p -S 'RETRY_LIMIT' -- src/
Theo tài liệu Git log, -S tìm thay đổi làm số lần xuất hiện của chuỗi trong một file tăng hoặc giảm. Lệnh đầu liệt kê ngắn gọn; -p bổ sung patch để đọc cách chuỗi được thêm hoặc bỏ.
2. Khi số lần xuất hiện không đổi
Giả sử một dòng đổi từ RETRY_LIMIT = 3 sang RETRY_LIMIT = 5. Chuỗi RETRY_LIMIT vẫn xuất hiện một lần trước và sau, nên -S với riêng tên này không chọn thay đổi chỉ vì giá trị đã đổi.
git log -p -G 'RETRY_LIMIT' -- src/
-G xét các dòng thêm hoặc xóa trong patch có khớp biểu thức chính quy hay không. Vì vậy, nó phù hợp hơn khi muốn tìm các dòng chứa tên cấu hình đã bị sửa, kể cả khi số lần tên xuất hiện giữ nguyên.
-S mặc định nhận chuỗi nguyên văn; -G nhận regex. Với tên chứa dấu chấm hoặc ký tự đặc biệt, hãy chú ý ý nghĩa regex thay vì sao chép mẫu giữa hai tùy chọn và giả định kết quả tương đương.
3. Xác định phạm vi lịch sử
Nếu không chỉ định revision, git log thường bắt đầu từ HEAD. Một thay đổi chỉ có trên nhánh khác có thể không nằm trong lịch sử đang duyệt. Khi thực sự cần mở rộng tới các ref có sẵn trong repository local, có thể dùng:
git log --all --oneline -S 'RETRY_LIMIT' -- src/
--all không tự tải lịch sử mới từ server. Repository shallow hoặc thiếu ref vẫn giới hạn kết quả. Đường dẫn src/ cũng là bộ lọc: nếu mã từng nằm ở nơi khác, cần xem lại phạm vi đường dẫn trước khi kết luận không có thay đổi.
4. Đọc bối cảnh sau khi tìm được commit
Commit khớp chỉ là điểm bắt đầu. Đọc thông điệp, test đi kèm và các file liên quan để hiểu thay đổi sửa lỗi hay thay chính sách. Không tự revert chỉ vì đó là lần cuối cấu hình thay đổi.
Nếu cần xem snapshot file tại commit đó, dùng git show với mã commit và đường dẫn đã xác định. Với merge commit, cách hiển thị diff có quy tắc riêng; đừng coi tìm kiếm mặc định là bằng chứng đã kiểm tra đầy đủ mọi nhánh và mọi cách giải quyết merge.
5. Checklist điều tra
- Muốn tìm tăng/giảm số lần chuỗi xuất hiện hay tìm dòng bị sửa?
- Mẫu đang là chuỗi nguyên văn hay regex?
- Đã chọn đúng nhánh, ref và đường dẫn chưa?
- Lịch sử local có đầy đủ cho câu hỏi không?
- Đã đọc patch và test trước khi đề xuất thay đổi chưa?
- Output có dữ liệu nhạy cảm cần che trước khi chia sẻ không?
-S và -G giúp thu hẹp lịch sử theo nội dung thay đổi. Kết quả đáng tin đến từ câu hỏi rõ ràng và phạm vi được xác nhận, không chỉ từ việc lệnh có trả về một commit.




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