Công cụ 22/09/2026 4 phút

git stash: cất tạm việc dở để đổi nhánh gấp — và khác biệt pop vs apply

Đang sửa dở nửa chừng thì sếp bảo fix bug gấp ở nhánh khác — commit thì chưa xong, bỏ thì mất. git stash cất thay đổi vào ngăn tạm để working tree sạch lại, làm việc khác rồi lấy ra tiếp. Bài này đo thật bằng git 2.39: stash bỏ qua file untracked (phải -u), apply giữ stash còn pop thì xóa, và bản chất stash là commit ẩn.

Công cụ 22/09/2026 5 phút

git worktree: một kho .git, nhiều thư mục làm việc song song

Cần code nhánh A mà vẫn build/test nhánh B cùng lúc? Stash làm mất ngữ cảnh, clone lại thì tốn dung lượng và tách rời kho. git worktree cho một .git dùng chung nhưng nhiều thư mục làm việc, mỗi cái ở một nhánh. Bài này đo thật: hai cây hai nhánh làm việc độc lập, commit ở cây này cây kia thấy ngay, và vì sao không checkout được cùng một nhánh ở hai cây.

Công cụ 22/09/2026 5 phút

git submodule: repo lồng trong repo — vì sao nó ghim commit và hay gây rối

Submodule nhúng một kho Git vào kho khác nhưng không chép file — nó chỉ ghi một con trỏ tới đúng một commit của kho con. Điều này khiến build tái lập được nhưng cũng gây rối nếu không hiểu. Bài này đo thật: submodule là gitlink mode 160000, lib lên v2 mà app vẫn ghim v1, và cách cập nhật đúng — cùng ba cái bẫy kinh điển.

Công cụ 22/09/2026 5 phút

Git hooks: tự động kiểm tra trước commit/push — và vì sao hook không clone theo

Git có thể tự chạy script của bạn ở mỗi commit, mỗi push — chặn code lỗi, ép định dạng message, chạy test trước khi push. Bài này đo thật bằng git 2.39: pre-commit chặn commit chứa TODO, commit-msg bắt buộc mã ticket, và cái bẫy lớn nhất — hook nằm trong .git nên không clone theo, đồng đội không có.

Công cụ 22/09/2026 5 phút

Rebase tương tác: gộp, sửa, xóa commit — dọn lịch sử nhánh cho sạch

Nhánh tính năng thường đầy commit fix typo, wip, sua nua — mở PR với lịch sử đó thì reviewer khó đọc. git rebase -i cho bạn viết lại N commit gần nhất: squash/fixup gộp, reword sửa message, drop xóa, đổi thứ tự. Bài này đo thật bằng git 2.39, tự động hóa qua GIT_SEQUENCE_EDITOR: 5 commit lộn xộn gộp còn 2, nội dung nguyên vẹn.

Công cụ 22/09/2026 5 phút

git gc, fsck và bảo trì kho: dọn rác, nén, và vì sao reflog cứu object khỏi bị xóa

Thư mục .git tự phình rồi tự dọn. Bài cuối sê-ri Git đo thật: gc gom loose object thành packfile nén (9 object 36 KiB xuống 1.86 KiB), fsck báo object mồ côi, và điểm nhiều người hiểu sai — gc --prune=now KHÔNG xóa object mà reflog còn giữ; phải hết hạn reflog rồi gc mới xóa thật. Đây chính là lưới an toàn cứu commit tưởng đã mất.