Tại sao mình chuyển sang dùng Lazygit?
Mình từng mất code quan trọng vì force push nhầm branch — bấm lệnh quá nhanh, không kiểm tra kỹ nhánh đang đứng, và một đống commit của teammate bị ghi đè. Từ hôm đó mình bắt đầu tìm cách làm chậm lại quy trình Git. Không phải để gõ ít hơn — mà để nhìn thấy rõ hơn trước khi làm gì đó không thể hoàn tác.
Lazygit ra đời đúng vào lúc mình cần. Nó không thay thế Git — nó là một lớp giao diện ngồi trên Git, hiển thị mọi thứ ngay trong terminal. Bạn vẫn kiểm soát hoàn toàn từng thao tác.
Lazygit là gì và tại sao nó khác với các GUI khác?
Lazygit là một TUI (Terminal User Interface) cho Git, viết bằng Go. File binary chỉ khoảng 7MB, không cần cài thêm dependency nào. Điểm khác biệt so với các GUI desktop như GitKraken hay Sourcetree là nó chạy hoàn toàn trong terminal — SSH vào VPS, gõ lazygit, làm việc bình thường.
Không cần chuột. Không cần rời khỏi terminal. Không cần nhớ cú pháp git rebase -i HEAD~5 khi bạn chỉ muốn squash vài commit.
Lazygit chia màn hình thành các panel:
- Files — danh sách file thay đổi (staged/unstaged)
- Branches — danh sách nhánh local và remote
- Commits — lịch sử commit có thể cuộn và thao tác
- Stash — danh sách stash entries
- Log/Graph — commit graph trực quan
Cài đặt Lazygit
Ubuntu / Debian
LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit
sudo install lazygit /usr/local/bin
macOS (Homebrew)
brew install lazygit
Arch Linux
sudo pacman -S lazygit
Sau khi cài, vào thư mục Git bất kỳ và gõ:
lazygit
Nếu thấy giao diện chia panel xuất hiện là xong. Nhấn ? để xem toàn bộ phím tắt.
Những tính năng mình dùng nhiều nhất
1. Stage từng dòng thay vì cả file
Đây là tính năng mình thích nhất. Thay vì git add -p rồi trả lời y/n liên tục, trong Lazygit bạn chỉ cần:
- Chọn file trong panel Files
- Nhấn Enter để mở diff view
- Dùng mũi tên di chuyển đến dòng muốn stage
- Nhấn Space để stage từng dòng, hoặc v để chọn vùng rồi Space
Rất hữu ích khi bạn sửa nhiều thứ trong cùng một file nhưng chỉ muốn commit một phần — ví dụ fix bug ở trên nhưng chưa muốn commit đoạn refactor ở dưới.
2. Interactive rebase không cần nhớ lệnh
Trước đây mỗi lần squash commit mình phải gõ git rebase -i HEAD~3, mở editor, sửa từ pick sang squash, lưu lại — mất 30 giây chỉ để squash 2 commit. Với Lazygit:
- Chuyển sang panel Commits (nhấn số 4 hoặc click)
- Chọn commit muốn thao tác
- Nhấn s để squash vào commit phía trên, hoặc r để rename
Muốn reorder commit? Nhấn Ctrl+j / Ctrl+k để kéo lên xuống trực tiếp — trực quan hơn nhiều so với tay sửa file text trong vim.
3. Cherry-pick trực quan
Cần lấy một commit từ nhánh khác? Trong Lazygit:
- Chuyển sang nhánh nguồn trong panel Branches
- Vào panel Commits, chọn commit muốn lấy
- Nhấn c để copy (cherry-pick)
- Chuyển về nhánh đích, nhấn v để paste
Lazygit highlight commit đang được cherry-pick bằng màu khác — bạn biết chính xác mình đang làm gì trước khi xác nhận.
4. Xem và quản lý stash dễ hơn
Hay bị tình huống stash xong quên không biết stash@{2} là cái gì không? Panel Stash liệt kê tất cả entries kèm message, xem preview diff ngay tại chỗ. Nhấn Space để apply, g để pop, d để xóa — gọn hơn nhiều so với gõ lệnh mù.
5. Force push an toàn hơn
Sau lần mất code vì force push nhầm, mình rất cẩn thận với bước này. Lazygit có tính năng force push with lease — nhấn shift+P thay vì P khi push. Nó dùng --force-with-lease thay vì --force, tức là chỉ force push nếu remote chưa có commit mới từ người khác. Mất thêm một phím nhưng tránh được sự cố đúng như mình đã gặp.
Một số phím tắt cần nhớ khi mới bắt đầu
Lazygit có hàng chục phím tắt, nhưng ban đầu chỉ cần nhớ những cái này là đủ dùng:
Space — Stage/unstage file hoặc dòng
Enter — Mở file để stage từng dòng / xem chi tiết
c — Commit (mở form nhập message)
P — Push lên remote
p — Pull từ remote
b — Tạo branch mới
shift+M — Merge branch đang chọn vào branch hiện tại
R — Rebase branch hiện tại lên branch đang chọn
q — Thoát Lazygit
? — Xem tất cả phím tắt của panel hiện tại
Tích hợp vào workflow hàng ngày
Mình thường alias Lazygit để gõ nhanh hơn:
# Thêm vào ~/.bashrc hoặc ~/.zshrc
alias lg='lazygit'
Một mẹo nhỏ nữa: Lazygit tự động reload khi bạn thay đổi file từ terminal khác. Mở nó ở một pane tmux, làm việc ở pane kia — trạng thái update realtime, không cần refresh tay.
Nếu bạn dùng Neovim, có plugin lazygit.nvim cho phép mở Lazygit trong floating window ngay trong editor bằng một phím tắt.
Khi nào vẫn nên dùng lệnh Git thuần?
Lazygit không cover 100% các tình huống. Một số trường hợp mình vẫn gõ lệnh trực tiếp:
- Git bisect — Lazygit chưa có UI riêng cho tính năng này (xem bài về git bisect trên blog)
- Submodules phức tạp — hỗ trợ cơ bản nhưng chưa đầy đủ
- Custom hooks hoặc scripts cần output cụ thể
- Scripting / CI — Lazygit là interactive tool, không phù hợp trong pipeline
Hiểu Git căn bản vẫn quan trọng — Lazygit chỉ là lớp UI giúp bạn thao tác nhanh hơn, không thay thế việc hiểu Git hoạt động thế nào bên dưới.
Kết luận
Sau vài tháng dùng Lazygit hàng ngày, mình nhận ra mình commit thường xuyên hơn, commit nhỏ hơn và rõ ràng hơn — vì việc stage từng dòng và viết commit message trở nên quá dễ. Mà thực ra đó là điều mình luôn biết nên làm — Lazygit chỉ giúp việc đó không còn lười nữa.
Nếu bạn vẫn đang copy-paste lệnh Git từ Stack Overflow mỗi khi cần rebase hay cherry-pick, thử Lazygit một tuần — khả năng cao bạn sẽ không muốn quay lại cách cũ.
