- Tác giả
- Name
- Nguyễn Đức Xinh
- Ngày xuất bản
- Ngày xuất bản
Kỹ Thuật Git Nâng Cao: Rebase, Stashing, Cherry-picking và Git Hooks
Giới Thiệu
Ngoài các lệnh Git cơ bản, Git còn cung cấp nhiều tính năng nâng cao giúp developer kiểm soát code và quy trình làm việc tốt hơn. Trong bài viết này, chúng ta sẽ tìm hiểu về các kỹ thuật Git nâng cao thường được sử dụng bởi các developer chuyên nghiệp.
1. Interactive Rebase - Tái Cấu Trúc Lịch Sử Commit
Interactive Rebase là công cụ mạnh mẽ cho phép bạn chỉnh sửa, tổ chức lại lịch sử commit một cách linh hoạt.
Cách Sử Dụng Cơ Bản
git rebase -i HEAD~3 # Rebase 3 commit gần nhất
Các Tùy Chọn Trong Interactive Rebase
Lệnh | Mục Đích | Khi Nào Sử Dụng |
---|---|---|
pick |
Giữ nguyên commit | Khi muốn giữ commit không thay đổi |
reword |
Thay đổi message | Khi cần sửa nội dung commit message |
squash |
Kết hợp với commit trước | Gộp nhiều commit nhỏ liên quan |
fixup |
Kết hợp và bỏ message | Gộp nhanh không cần giữ message |
drop |
Xóa commit | Loại bỏ commit không cần thiết |
edit |
Tạm dừng để chỉnh sửa | Sửa đổi nội dung của commit |
Best Practices Khi Sử Dụng Rebase
-
Không Rebase Public Branches:
- Chỉ rebase trên branch cá nhân
- Tránh rebase các branch đã được push
- Cẩn thận với shared branches
-
Backup Trước Khi Rebase:
git branch backup/feature-x git rebase -i master
-
Xử Lý Conflicts:
# Khi có conflict git status # Sửa conflict git add . git rebase --continue
2. Stashing - Lưu Trữ Thay Đổi Tạm Thời
Stash là tính năng giúp lưu trữ tạm thời các thay đổi chưa commit, rất hữu ích khi cần chuyển context nhanh.
Các Lệnh Stash Cơ Bản
git stash # Lưu thay đổi
git stash save "message" # Lưu với mô tả
git stash pop # Áp dụng và xóa stash gần nhất
git stash apply # Áp dụng nhưng không xóa
git stash list # Xem danh sách stash
git stash drop stash@{n} # Xóa stash cụ thể
Tình Huống Sử Dụng Stash
-
Chuyển Branch Khẩn Cấp:
git stash git checkout hotfix # Xử lý hotfix git checkout previous-branch git stash pop
-
Lưu Nhiều Thay Đổi:
git stash save "feature-a changes" git stash save "feature-b changes" # Xem danh sách git stash list
-
Áp Dụng Stash Cụ Thể:
git stash apply stash@{2}
3. Cherry-picking - Chọn Lọc Commit
Cherry-pick cho phép bạn áp dụng các commit cụ thể từ branch này sang branch khác.
Cú Pháp Và Tùy Chọn
git cherry-pick commit-hash
git cherry-pick commit-hash1 commit-hash2 # Nhiều commit
git cherry-pick -x commit-hash # Thêm thông tin nguồn commit
Kịch Bản Sử Dụng
-
Backport Fix:
# Áp dụng fix từ master về branch cũ git checkout old-release git cherry-pick master-fix-commit
-
Chọn Lọc Tính Năng:
# Chỉ lấy một số commit cụ thể git cherry-pick A B C
4. Git Hooks - Tự Động Hóa Quy Trình
Git hooks là scripts tự động chạy tại các thời điểm nhất định trong quy trình Git, giúp tự động hóa và kiểm soát chất lượng code.
Các Loại Hook Phổ Biến
Hook | Thời Điểm Chạy | Mục Đích Sử Dụng |
---|---|---|
pre-commit | Trước khi commit | Kiểm tra code style, lint |
post-commit | Sau khi commit | Thông báo, log |
pre-push | Trước khi push | Chạy tests |
post-checkout | Sau khi checkout | Cập nhật dependencies |
pre-receive | Trước khi nhận push | Kiểm tra server-side |
Ví Dụ Hook Scripts
1. Pre-commit Hook để Chạy Linter:
#!/bin/sh
npm run lint
2. Post-commit Hook để Thông Báo:
#!/bin/sh
echo "Commit thành công!"
3. Pre-push Hook để Chạy Tests:
#!/bin/sh
npm run test
Cài Đặt và Quản Lý Hooks
-
Vị Trí Lưu Trữ:
- Hooks được lưu trong thư mục
.git/hooks
- Mỗi file hook cần có quyền thực thi
- Hooks được lưu trong thư mục
-
Chia Sẻ Hooks:
# Tạo thư mục hooks trong project mkdir .hooks # Cập nhật git config git config core.hooksPath .hooks
Lời Kết
Các kỹ thuật Git nâng cao này giúp bạn có thêm công cụ mạnh mẽ để quản lý code và quy trình làm việc hiệu quả hơn. Tuy nhiên, cần thận trọng khi sử dụng, đặc biệt là với các tính năng như rebase có thể ảnh hưởng đến lịch sử commit.
Tài Liệu Tham Khảo
- Git Documentation: https://git-scm.com/docs
- Git Hooks Guide: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
- Advanced Git Tutorial: https://www.atlassian.com/git/tutorials/advanced-overview
- Git Rebase Guide: https://git-scm.com/book/en/v2/Git-Branching-Rebasing