Khi VS Code ‘giương cờ trắng’ trước Repo khủng
Dự án phình to lên hàng nghìn file, máy bắt đầu ì ạch khi bạn nhấn Ctrl + Shift + F? Cảm giác chờ đợi vòng tròn xoay tít trên IDE chỉ để tìm một cái tên hàm thực sự rất ức chế. Đó là lúc bạn nên gác lại các công cụ đồ họa để tận dụng sức mạnh cốt lõi của Git.
Thay vì duyệt tuần tự từng file trên ổ cứng, Git hiểu cực rõ cấu trúc dự án và lục lọi lịch sử rất nhanh. Thử nghiệm trên các bộ mã nguồn lớn, git grep có thể trả kết quả trong chưa đầy 1 giây. Hai trợ thủ mình muốn giới thiệu hôm nay là git grep và git log -S (Pickaxe).
Giải pháp nhanh: Dùng ngay trong 30 giây
Nếu bạn đang vội, đây là hai câu lệnh ‘cứu cánh’ hiệu quả nhất:
1. Tìm kiếm trong code hiện tại
git grep "tên_hàm_hoặc_biến"
Lệnh này quét toàn bộ dự án hiện tại nhanh hơn grep thông thường. Lý do là Git tự động bỏ qua những file trong .gitignore và không tốn công đào bới thư mục .git.
2. Truy vết đoạn code đã biến mất
git log -S "đoạn_code_bị_mất" --oneline
Đây là ‘phao cứu sinh’ khi ai đó lỡ tay xóa mất logic quan trọng. Bạn sẽ biết chính xác đoạn code đó từng tồn tại ở những commit nào để khôi phục lại.
Khai thác sức mạnh của Git Grep
git grep không chỉ dừng lại ở việc tìm văn bản đơn thuần. Nó cung cấp các tùy chọn để bạn khoanh vùng kết quả cực kỳ chuẩn xác.
Xác định số dòng và ngữ cảnh
Chỉ biết tên file thường là chưa đủ. Bạn nên thêm flag -n để biết chính xác số dòng cần sửa:
git grep -n "API_KEY"
Muốn xem thêm các dòng xung quanh để hiểu logic? Hãy dùng -C (Context):
git grep -C 2 "function validate()"
Tìm code ở nhánh khác không cần Checkout
Đây là điểm ‘ăn tiền’ nhất so với trình tìm kiếm của IDE. Bạn có thể lục lọi code ở một nhánh cũ mà không cần tạm dừng công việc hiện tại để chuyển nhánh:
git grep "feature_old_logic" branch_dev
Kiểm tra mức độ sử dụng biến
Trước khi refactor, mình thường dùng -c để đếm số lần một hàm xuất hiện. Nó giúp mình đánh giá nhanh rủi ro mà không cần mở từng file:
git grep -c "processData"
Đào sâu lịch sử với Git Log -S (Pickaxe)
Hồi mới đi làm, mình từng mất cả buổi sáng tìm một hằng số cấu hình bị xóa. Đồng nghiệp thường commit với tin nhắn rất ngắn ngủi như “update” hay “fix bug”, khiến việc tìm kiếm thông thường vô tác dụng. Khi đó, Pickaxe đã giải cứu mình.
Cái tên “Pickaxe” (cái cuốc) ngụ ý việc bạn đang đào bới sâu vào từng lớp dữ liệu. Lệnh -S tìm các commit mà ở đó số lượng từ khóa thay đổi (tức là có người thêm mới hoặc xóa bỏ hoàn toàn dòng đó).
git log -S "DATABASE_URL" -p
Flag -p (patch) sẽ hiển thị luôn nội dung thay đổi. Bạn sẽ thấy rõ ai đã ‘ra tay’ xóa dòng code đó và vào thời điểm nào.
Lưu ý: Phân biệt -S và -G
Đừng nhầm lẫn giữa hai tùy chọn này nếu không muốn bỏ lỡ kết quả:
git log -S "string": Chỉ báo khi tổng số lần từ khóa xuất hiện trong file thay đổi.git log -G "regex": Tìm mọi commit mà phần thay đổi có chứa từ khóa (hỗ trợ biểu thức chính quy mạnh mẽ hơn).
Kinh nghiệm thực tế từ những lần ‘ăn hành’
Mình nhớ có lần dự án dính bug liên quan đến việc ghi log lỗi. Đoạn mã này đã tồn tại từ lâu và không ai nhớ vị trí. Mình dùng git log -G "Logger\.error" để quét lại lịch sử. Kết quả chỉ ra một commit từ 2 năm trước của một senior đã nghỉ việc. Nếu không có Pickaxe, chắc mình phải đọc hàng nghìn commit message để đoán mò.
Một bài học xương máu khác là đừng quá tin vào git push --force. Có lần mình lỡ tay đè mất code của team. Nhờ dùng git reflog kết hợp git grep trong các commit cũ, mình đã tìm lại được mã băm (hash) và khôi phục kịp thời trước khi leader phát hiện. Từ đó, mình luôn dùng --force-with-lease cho an toàn.
Mẹo nhỏ để làm việc hiệu quả hơn
- Dùng Alias: Tiết kiệm thời gian bằng cách đặt phím tắt. Ví dụ:
git config --global alias.gg "grep -n". - Luôn dùng ngoặc kép: Bọc từ khóa trong
" "để tránh lỗi khi tìm cụm từ có khoảng trắng hoặc ký tự đặc biệt. - Kết hợp với Linux Pipe: Bạn có thể đẩy kết quả sang
xargsđể xử lý hàng loạt, chẳng hạn như tìm và xóa nhanh các file chứa cấu hình cũ.
Hy vọng những kỹ thuật này giúp bạn bớt ‘vật lộn’ với các dự án lớn. Thay vì tốn hàng giờ tìm kiếm thủ công, hãy để Git làm công việc nặng nhọc đó cho bạn!

