Tăng 200% năng suất với Git Aliases và tùy biến file .gitconfig cá nhân
Hướng dẫn Git Aliases và .gitconfig thực chiến: alias an toàn, log đẹp, cấu hình pull/push/rebase, includeIf cho tài khoản work/personal, bảo mật và chia sẻ dotfiles.
ShanverseCập nhật 11 phút đọc— lượt xemĐang tải lượt xem
Git
Developer Tools
Thay vì gõ:
Bạn có thể dùng:
Thay vì nhớ từng flag cho branch, fetch hay commit amend, bạn đóng gói các lựa chọn đã được kiểm chứng thành alias cá nhân.
“Tăng 200%” là cách nói về mức cải thiện trải nghiệm và tốc độ thao tác; hiệu quả thực tế phụ thuộc workflow, mức độ lặp lại và kỷ luật sử dụng của mỗi người.
Git config được lưu ở đâu?
Git đọc cấu hình theo nhiều scope:
Cấu hình cụ thể hơn thường ghi đè cấu hình rộng hơn. File global phổ biến:
Linux/macOS: ~/.gitconfig hoặc
Bình luận
~/.config/git/config
.
Windows: file global trong home directory của user, thường C:\Users\<name>\.gitconfig.
Xem tất cả giá trị kèm nguồn và scope:
Mở global config:
Tạo Git Alias đầu tiên
Sau đó:
Git tự nối argument phía sau alias. Ví dụ new = switch -c cho phép:
Bộ alias nền tảng nên có
Thêm trực tiếp trong ~/.gitconfig:
Cách dùng:
Vì sao có -- ở alias theo path?
-- kết thúc phần option và báo rằng argument sau là path. Điều này tránh tên file bắt đầu bằng dấu - bị hiểu nhầm thành option.
Alias log dễ đọc
Bản ngắn:
Bản có ngày và tác giả:
Dùng thêm filter:
Alias chỉ là phần đầu command; option bạn nhập sau vẫn được truyền tiếp.
Alias cho diff và review
Ví dụ trước commit:
Một alias không nên che mất bước review. Mục tiêu là làm review nhanh hơn, không phải bỏ qua nó.
Alias cho branch và remote
Xem branch gần đây:
git gone chỉ hiển thị tracking state; đừng tự động xóa branch chỉ vì thấy [gone] mà chưa kiểm tra commit chưa merge.
Shell alias với dấu !
Alias Git thông thường mở rộng thành một Git subcommand. Khi value bắt đầu bằng !, Git chạy shell command.
Ví dụ:
Dùng:
Function alias nhận argument
Thiết lập trên shell Unix-like:
Alias phức tạp:
Sau đó:
@{u} là upstream branch của branch hiện tại. Alias sẽ lỗi nếu branch chưa có upstream.
Lưu ý cross-platform
Quoting khác nhau giữa Bash, Zsh, PowerShell và Command Prompt. Với alias phức tạp:
Ưu tiên viết script riêng rồi alias gọi script.
Test trên hệ điều hành thật.
Không giả định single quote hoạt động giống nhau.
Dùng path portable hoặc tài liệu riêng cho từng OS.
Ví dụ:
Script riêng dễ test, version và review hơn chuỗi shell dài trong .gitconfig.
Alias an toàn cho undo
git uncommit: bỏ commit local gần nhất, giữ thay đổi staged.
Tên undo không mô tả dữ liệu sẽ mất. Nếu cần alias rủi ro, đặt tên thật rõ và vẫn kiểm tra trạng thái trước.
.gitconfig cá nhân thực dụng
Giải thích các tùy chọn quan trọng
init.defaultBranch = main
Repository mới bắt đầu bằng main:
fetch.prune = true
Tự dọn remote-tracking refs không còn trên remote sau fetch. Nó không tự xóa local branches.
pull.ff = only
git pull chỉ thành công khi fast-forward, tránh Git tự tạo merge commit ngoài dự kiến. Khi branch diverge, bạn phải chủ động chọn rebase hoặc merge.
Một team dùng rebase có thể chọn:
Không bật cả hai policy mâu thuẫn nếu chưa hiểu workflow của team.
push.autoSetupRemote = true
Lần đầu push branch mới, Git tự thiết lập upstream trong phiên bản hỗ trợ:
Kiểm tra Git version và policy của team trước khi đưa config vào dotfiles dùng trên nhiều máy.
rebase.autoStash = true
Git tạm stash thay đổi khi rebase và áp lại sau. Tiện nhưng không thay thế việc đọc git status; lúc áp lại vẫn có thể conflict.
rerere.enabled = true
Git ghi nhớ cách bạn từng giải một conflict và có thể tái sử dụng resolution. Luôn review kết quả trước commit.
merge.conflictStyle = zdiff3
Conflict marker hiển thị thêm base context, giúp hiểu hai phía thay đổi từ đâu. Nếu Git cũ không hỗ trợ, dùng diff3.
diff.algorithm = histogram
Thường tạo diff dễ đọc hơn cho code bị di chuyển hoặc thay đổi block lớn. Đây là preference, nên test với codebase của bạn.
Quản lý danh tính Work và Personal bằng includeIf
Đây là một trong những tùy biến giá trị nhất khi dùng nhiều Git account.
File global ~/.gitconfig
Dấu / cuối path giúp match mọi repository nằm bên dưới thư mục.
~/.gitconfig-work
~/.gitconfig-personal
Kiểm tra trong từng repository:
Trên filesystem không phân biệt hoa thường, có thể cân nhắc gitdir/i: theo tài liệu/phiên bản Git đang dùng.
Cấu hình signing commit
Tùy policy, bạn có thể dùng GPG hoặc SSH signing. Ví dụ khái niệm:
Với SSH signing, còn cần chọn format phù hợp theo Git version:
Không copy signingKey mẫu nguyên xi. Cấu hình key thật theo hệ điều hành, Git version và nền tảng remote, sau đó test:
Xóa/revert test commit nếu không cần.
Credential: điều không nên đặt trong .gitconfig
Không lưu plaintext token/password:
Dùng credential manager của hệ điều hành, SSH agent hoặc secret manager. Xem helper hiện tại:
Không đặt wildcard thiếu an toàn:
Chỉ thêm safe.directory cụ thể khi bạn hiểu lý do ownership warning.
Line endings: không copy config máy khác mù quáng
Windows và Unix có chiến lược line ending khác nhau.
hoặc:
Không có giá trị đúng cho mọi team. Ưu tiên định nghĩa .gitattributes trong repository để line ending nhất quán, rồi chọn global config tương thích với môi trường.
Ví dụ .gitattributes:
Kiểm tra và debug alias
Liệt kê alias:
Xem nguồn alias:
Xem một value:
Xóa alias:
Đổi tên alias bằng cách unset alias cũ và set alias mới.
Nếu alias shell chạy sai, chạy command gốc trực tiếp và kiểm tra quoting, current directory, environment variables cùng exit code.
Chia sẻ .gitconfig bằng dotfiles
Nên version control:
Aliases.
Editor preference.
Diff/log format.
Include rules không chứa secret.
Script tiện ích đã review.
Không nên commit:
Token/password.
Private key.
Email nội bộ nếu repository dotfiles public và bạn không muốn lộ.
Credential helper data.
Path riêng nhạy cảm.
Cấu trúc:
Dùng file .example và tạo config local ngoài Git cho dữ liệu cá nhân.
Thiết kế alias tốt
Một alias tốt:
Ngắn nhưng đoán được nghĩa.
Không che khuất hành vi phá hủy.
Compose được với argument Git.
Hoạt động trên nhiều repository.
Có tài liệu ngắn.
Có thể bỏ mà vẫn biết command gốc.
Một alias tệ:
doit, fix, magic, undo nhưng không rõ tác động.
Tự force push.
Tự xóa branch/file không confirm.
Kết hợp quá nhiều bước không rollback được.
Chứa secret hoặc gọi script không tin cậy.
Bộ alias gợi ý theo cấp độ
Cấp 1 — Không phá hủy
Cấp 2 — Thay đổi Index/commit local
Cấp 3 — Shell automation
Chỉ thêm sau khi đọc, test và tài liệu hóa:
Checklist .gitconfig
user.name và user.email đúng theo thư mục work/personal.
init.defaultBranch đã đặt.
Pull policy được chọn có chủ đích.
Alias phá hủy có tên rõ hoặc đã loại bỏ.
Không có token/password/private key.
Credential helper dùng cơ chế của hệ điều hành.
Line ending phù hợp .gitattributes của team.
Signing đã test nếu bắt buộc.
Config source được kiểm tra bằng --show-origin.
Dotfiles public không chứa dữ liệu nhạy cảm.
Alias shell đã được review như code.
Team vẫn hiểu command Git gốc.
Cheat sheet
Tổng kết
Một .gitconfig hiệu quả nên:
Rút gọn command lặp lại bằng alias dễ hiểu.
Đặt default an toàn cho pull, push, fetch và conflict.
Tách identity work/personal bằng includeIf.
Không chứa credential hoặc alias phá hủy mơ hồ.
Được version hóa như dotfiles nhưng giữ dữ liệu nhạy cảm bên ngoài.
Được review và cải tiến theo workflow thực tế.
Mục lục(38)
Codebash
1gitlog--graph--decorate--oneline--all
Codebash
1gitlg
Codeplain text
1[alias]2 st = status --short --branch3 sw = switch4 new = switch -c5 br = branch -vv6 lg = log --graph --decorate --oneline --all7 last = log -1 --stat8 staged = diff --staged9 unstage = restore --staged --10 discard = restore --11 amend = commit --amend --no-edit
Phân tích Gitflow vs GitHub Flow vs Trunk-Based Development: cấu trúc branch, ưu nhược điểm, điều kiện áp dụng, ma trận quyết định và lộ trình chuyển đổi cho từng loại dự án.
Hướng dẫn git worktree từ cơ bản đến thực tế: tạo nhiều working tree, làm feature và hotfix song song, review PR, quản lý list/remove/prune/lock/repair và tránh lỗi phổ biến.