Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
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

  1. 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
  2. Backup Trước Khi Rebase:

    git branch backup/feature-x
    git rebase -i master
    
  3. 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

  1. Chuyển Branch Khẩn Cấp:

    git stash
    git checkout hotfix
    # Xử lý hotfix
    git checkout previous-branch
    git stash pop
    
  2. 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
    
  3. Á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

  1. Backport Fix:

    # Áp dụng fix từ master về branch cũ
    git checkout old-release
    git cherry-pick master-fix-commit
    
  2. 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

  1. 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
  2. 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

  1. Git Documentation: https://git-scm.com/docs
  2. Git Hooks Guide: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
  3. Advanced Git Tutorial: https://www.atlassian.com/git/tutorials/advanced-overview
  4. Git Rebase Guide: https://git-scm.com/book/en/v2/Git-Branching-Rebasing