/git

Thực hiện stage tất cả các thay đổi, tạo một bản commit theo tiêu chuẩn conventional với thông điệp chuyên nghiệp, và đẩy (push) lên kho lưu trữ từ xa chỉ trong một lệnh duy nhất. Hoàn hảo cho các chu kỳ lặp lại nhanh chóng.

Cú pháp

/git:cp

Cách hoạt động

Lệnh này kết hợp /git:cm (commit) với git push:

1. Stage & Commit (/git:cm)

  • Phân tích tất cả các thay đổi (staged + unstaged)
  • Tạo thông điệp commit theo tiêu chuẩn conventional
  • Stage các tệp liên quan
  • Tạo commit

2. Đẩy lên kho lưu trữ từ xa (Push)

  • Đẩy lên nhánh upstream của nhánh hiện tại
  • Hoặc yêu cầu thiết lập upstream nếu chưa được cấu hình
  • Xác minh việc đẩy lên thành công

Khi nào nên sử dụng

✅ Hoàn hảo cho

Phát triển nhanh

# Chu kỳ lặp lại nhanh
/cook [thêm tính năng]
/git:cp  # Commit và push ngay lập tức

Phát triển cá nhân

# Làm việc một mình trên nhánh tính năng
/git:cp  # Không cần xem lại cục bộ

Các thay đổi nhỏ

# Sửa lỗi đánh máy, cập nhật nhỏ
/fix:fast [lỗi đánh máy]
/git:cp  # Đẩy lên ngay

Tích hợp liên tục (CI)

# Kích hoạt CI sau mỗi thay đổi
/git:cp  # CI tự động chạy sau khi push

❌ Khi nào nên tránh

Hợp tác nhóm

 /git:cp  # Đẩy mã nguồn chưa được xem lại

 /git:cm  # Commit cục bộ
 Tạo PR   # Nhóm xem xét trước khi merge

Các thay đổi chưa chắc chắn

 /git:cp  # Không chắc bản sửa lỗi có hoạt động không

 /git:cm  # Commit cục bộ
 Kiểm tra thêm
 Sau đó: git push

Các nhánh chung (Shared Branches)

 /git:cp  # Trên nhánh main/develop

 Sử dụng các nhánh tính năng (feature branches)
 Tạo PR để xem xét

Ví dụ

Phát triển tính năng

# 1. Triển khai tính năng
/cook [thêm thông báo người dùng]

 Tính năng đã được triển khai
 Các bài kiểm tra đã được tạo (độ bao phủ 95%)
 Tài liệu đã được cập nhật

# 2. Commit và push
/git:cp

Đang phân tích các thay đổi...
 Đã stage 8 tệp
 Đã tạo commit: "feat: add user notifications system"
 Đã đẩy lên origin/feature/notifications

Các thay đổi hiện đã trên GitHub!

Quy trình sửa lỗi

# 1. Sửa lỗi
/fix:fast [lỗi đánh máy văn bản nút]

 Đã sửa lỗi đánh máy trong SubmitButton.tsx

# 2. Commit và push
/git:cp

 Commit: "fix: correct button text typo"
 Đã đẩy lên origin/bugfix/button-text

# 3. CI tự động chạy
 Các bài kiểm tra đã vượt qua
 Sẵn sàng để triển khai

Triển khai liên tục (CD)

# Phát triển với tính năng tự động triển khai lên staging

# Thay đổi 1
/cook [cập nhật header]
/git:cp  # → Triển khai lên staging

# Thay đổi 2
/fix:ui [vấn đề căn lề]
/git:cp  # → Triển khai lên staging

# Thay đổi 3
/docs:update
/git:cp  # → Triển khai lên staging

Điều gì xảy ra

Từng bước một

1. Đang phân tích các thay đổi...
   - 5 tệp đã sửa đổi
   - 2 tệp đã tạo mới
   - 1 tệp đã xóa

2. Đang tạo commit...
   ✓ Thông điệp commit đã được tạo:
     "feat: add real-time notifications

     - Implement WebSocket connection
     - Add notification bell UI
     - Store notifications in database
     - Add mark-as-read functionality
     - Include comprehensive tests"

3. Đang stage các tệp...
   ✓ src/services/notification.service.ts
   ✓ src/components/NotificationBell.tsx
   ✓ src/websocket/notification-handler.ts
   ✓ tests/notification.test.ts
   ✓ docs/api/notifications.md

4. Đang tạo commit...
   ✓ Commit đã được tạo: a1b2c3d

5. Đang đẩy lên remote...
   ✓ Đã đẩy lên origin/feature/notifications

6. Đang xác minh...
   ✓ Remote đã được cập nhật thành công
   ✓ CI đã được kích hoạt tự động

Hoàn thành! Xem tại:
https://github.com/user/repo/commit/a1b2c3d

Cấu hình

Thiết lập Upstream

Nếu upstream chưa được thiết lập:

⚠ Chưa thiết lập nhánh upstream

Thiết lập upstream thành origin/feature-name? (y/n)
> y

✓ Đã thiết lập upstream
✓ Đang đẩy lên...
✓ Hoàn thành

Thiết lập thủ công:

git branch --set-upstream-to=origin/feature-name

Các tùy chọn Push

ClaudeKit tự động xử lý:

  • Lần đẩy đầu tiên (git push -u origin branch-name)
  • Các lần đẩy tiếp theo (git push)
  • Cảnh báo đẩy đè (force push)
  • Xung đột khi đẩy

Kiểm tra an toàn

Xác minh trước khi Push

Đang chạy các kiểm tra trước khi push...

✓ Tất cả các bài kiểm tra đã vượt qua (87/87)
✓ Không có lỗi TypeScript
✓ Các kiểm tra lint đã vượt qua
✓ Không phát hiện các tệp nhạy cảm

An toàn để đẩy lên.

Phát hiện xung đột

⚠ Cảnh báo: Kho lưu trữ từ xa có các thay đổi mới

Nhánh từ xa có 3 commit mới.
Pull trước khi đẩy lên? (y/n)

Ngăn chặn đẩy đè (Force Push)

❌ Lỗi: Yêu cầu đẩy đè (force push)

Nhánh của bạn đang đi sau 'origin/main' 2 commit.

Các tùy chọn:
1. Pull và rebase: git pull --rebase
2. Tạo nhánh mới
3. Hủy bỏ

Lựa chọn:

Thực hành tốt nhất

Xác minh bài kiểm tra trước

# Luôn kiểm tra trước khi đẩy lên
/test

 Tất cả các bài kiểm tra đã vượt qua

# Bây giờ an toàn để đẩy lên
/git:cp

Xem lại các thay đổi

# Kiểm tra những gì bạn sắp đẩy lên
git diff

# Xem lại commit
git show HEAD

# Sau đó đẩy lên
git push  # hoặc /git:cp cho thay đổi tiếp theo

Sử dụng các nhánh tính năng

# Tạo nhánh tính năng
git checkout -b feature/new-dashboard

# Phát triển và đẩy lên
/cook [xây dựng dashboard]
/git:cp  # An toàn trên nhánh tính năng

# Tạo PR khi đã sẵn sàng
/git:pr

Commit nhỏ và thường xuyên

Tốt:

/cook [thêm form đăng nhập]
/git:cp

/cook [thêm form đăng ký]
/git:cp

/cook [thêm đặt lại mật khẩu]
/git:cp

Xấu:

# Làm việc trong 3 ngày
# Thực hiện 50 thay đổi
/git:cp  # Commit quá lớn, không rõ ràng

Các mẫu quy trình làm việc

Phát triển tính năng

# Ngày 1
git checkout -b feature/payments
/cook [triển khai tích hợp Stripe]
/git:cp

# Ngày 2
/cook [thêm giao diện thanh toán]
/git:cp

# Ngày 3
/test
/git:cp

# Tạo PR
/git:pr

Hotfix

# Lỗi nghiêm trọng trên production
git checkout -b hotfix/login-error
/fix:fast [lỗi đăng nhập]
/git:cp  # Đẩy lên ngay lập tức

# Tạo PR vào main
/git:pr main

# Merge và triển khai

Cập nhật tài liệu

# Cập nhật tài liệu
/docs:update
/git:cp  # Đẩy tài liệu lên ngay lập tức

# Các thay đổi sẽ xuất hiện trực tiếp trên trang tài liệu

Xử lý sự cố

Push bị từ chối

Vấn đề: ! [rejected] main -> main (non-fast-forward)

Giải pháp:

# Đừng đẩy đè!
# Thay vào đó, pull và rebase
git pull --rebase origin main

# Giải quyết xung đột nếu có
# Sau đó đẩy lên
git push

Upstream chưa được thiết lập

Vấn đề: “No upstream branch”

Giải pháp:

# Thiết lập upstream
git push -u origin branch-name

# Hoặc để /git:cp thực hiện
/git:cp
> y  # Khi được hỏi thiết lập upstream

Pre-Push Hooks thất bại

Vấn đề: Hook pre-push ngăn cản việc đẩy lên

Giải pháp:

# Sửa các vấn đề
npm run lint:fix
npm test

# Sau đó thử lại
/git:cp

Tệp lớn

Vấn đề: “File exceeds GitHub’s 100 MB limit”

Giải pháp:

# Sử dụng Git LFS
git lfs track "*.mp4"
git add .gitattributes

# Hoặc loại bỏ tệp lớn
git rm --cached large-file.mp4
echo "large-file.mp4" >> .gitignore

# Sau đó đẩy lên
/git:cp

So sánh

LệnhCommit cục bộĐẩy lên (Push)Trường hợp sử dụng
/git:cmXem lại trước khi đẩy lên
/git:cpChu kỳ lặp lại nhanh
git pushSau khi commit thủ công

Cách dùng nâng cao

Nhiều Remote

# Đẩy lên một remote cụ thể
git push staging
git push production

# /git:cp sử dụng mặc định (origin)

Bảo vệ nhánh (Branch Protection)

Một số kho lưu trữ có tính năng bảo vệ nhánh:

❌ Không thể đẩy lên nhánh được bảo vệ 'main'

Hãy tạo nhánh tính năng thay thế:
git checkout -b feature/your-changes
/git:cp  # Bây giờ hoạt động

Tích hợp CI

Sau khi /git:cp, CI sẽ tự động:

  1. Chạy các bài kiểm tra
  2. Build dự án
  3. Triển khai lên staging
  4. Thông báo cho nhóm

Theo dõi: gh run watch

Khi nào KHÔNG nên sử dụng

Đừng sử dụng /git:cp khi:

  • Đang làm việc trên các nhánh chung (main, develop)
  • Các thay đổi cần nhóm xem xét
  • Chưa chắc chắn liệu các thay đổi có hoạt động hay không
  • Có nhiều thay đổi không liên quan
  • Mã nguồn mang tính thử nghiệm
  • Các thay đổi gây phá vỡ (breaking changes)

Sử dụng thay thế:

/git:cm  # Commit cục bộ
# Kiểm tra, xem lại, nhận phản hồi
git push  # Đẩy lên thủ công khi đã sẵn sàng

Bước tiếp theo

  • /git
    - Tạo pull request
  • /git
    - Commit mà không push
  • Git Workflow - Quy trình làm việc nhóm

Điểm mấu chốt: /git:cp hợp lý hóa quá trình phát triển nhanh bằng cách kết hợp commit và push, hoàn hảo cho các nhánh tính năng và phát triển cá nhân, nhưng hãy thận trọng khi sử dụng trên các nhánh chung.