Các Lệnh Git Phổ Biến
Dưới đây là một số lệnh Git thường được sử dụng trong các tác vụ quản lý phiên bản (version control) hàng ngày:
1. Lệnh Git Cơ Bản
-
git init: Khởi tạo một Git repo mới trong thư mục hiện tại.
git init
-
git clone: Sao chép một Git repo có từ một máy chủ từ xa (remote).
git clone https://github.com/user/repo.git
-
git status Hiển thị trạng thái hiện tại của thư mục đang làm việc (working directory) và khu vực staging (khu vực được chuẩn bị cho commit).
git status
-
git add: Thêm các thay đổi (tệp hoặc thư mục) vào lần commit tiếp theo.
git add file.txt git add . # Thêm tất cả các thay đổi (Stage all changes)
-
git commit: Ghi lại các thay đổi đã được staged vào repo với một message tương ứng.
git commit -m "Commit message"
-
git push: Đẩy (Push) các commit từ local lên remote repo.
git push origin branch-name
-
git pull: Cập nhật các thay đổi từ remote repo về nhánh local branch.
git pull origin branch-name
2. Branching và Merging
-
git branch: Liệt kê, tạo mới, hoặc xóa branches.
git branch # Liệt kê tất cả các nhánh git branch new-branch # Tạo một nhánh mới git branch -d old-branch # Xóa một nhánh cũ
-
git checkout: Chuyển (switch) sang một nhánh hoặc commit khác.
git checkout branch-name git checkout -b new-branch # Tạo và chuyển sang nhánh mới
-
git merge: Hợp nhất (merge) một nhánh (branch) vào nhánh hiện tại.
git checkout main git merge feature-branch
3. Remote Repositories
-
git remote: Quản lý các kết nối với remote repo
git remote -v # Liệt kê các kết nối từ xa git remote add origin https://github.com/user/repo.git # Thêm một remote mới
-
git fetch: Cập nhật các thay đổi đã diễn ra trên remote repo về local (chỉ fetch history).
git fetch origin
4. Xem Lịch Sử (các thay đổi) Commits
-
git log: Hiển thị lịch sử commit.
git log # Hiển thị lịch sử commit git log --oneline # Hiển thị lịch sử rút gọn git log --graph --oneline --decorate # Hiển thị lịch sử commit dưới dạng đồ thị
-
git diff: Hiển thị các thay đổi giữa các commits, branches, hay the working directory.
git diff # Các thay đổi chưa được staged git diff --staged # Các thay đổi đã được staged để commit git diff branch1 branch2 # So sánh hai branch
5. Hoàn Tác Các Thay Đổi
-
git reset: Resets lại khu vực staging hoặc di chuyển con trỏ nhánh (branch pointer).
git reset file.txt # Hủy staged một tệp git reset --hard HEAD^ # Trở về commit trước đó
-
git revert: Hoàn tác một commit cụ thể bằng cách tạo một commit mới để đảo ngược nó.
git revert commit-sha
6. Lưu Trữ Các Thay Đổi (Stashing)
-
git stash: Tạm thời lưu các thay đổi chưa sẵn sàng để commit.
git stash # Lưu trữ các thay đổi hiện tại git stash pop # Áp dụng lại các thay đổi đã lưu trữ và xóa chúng khỏi stash git stash list # Liệt kê tất cả các thay đổi đã lưu trữ
7. Gắn Thẻ (Tagging)
-
git tag: Tạo các tag để đánh dấu các commit cụ thể, thường dùng cho các bản phát hành (releases).
git tag v1.0 # Tạo một lightweight tag git tag -a v1.0 -m "Version 1.0" # Tạo một annotated tag git push origin v1.0 # Đẩy tag lên remote repo
8. Cộng Tác (Collaboration)
-
git rebase: Áp dụng lại các commit trên một nhánh khác lên nhánh hiện tại , hữu ích để làm thẳng hàng, tuyến tính hóa (linearizing) lịch sử commit.
git checkout feature-branch git rebase main
-
git cherry-pick: Áp dụng một commit cụ thể từ một nhánh khác.
git cherry-pick commit-sha
Trên đây là những lệnh phổ biến khi làm việc với Git trong các dự án cá nhân và team.
Tổng Quan Về Git Flow
Git Flow là một chiến lược branching để quản lý phát triển tính năng, phát hành, và sửa lỗi theo cách có cấu trúc và mở rộng. Nó giúp các nhóm quản lý việc phát triển song song, cộng tác hiệu quả và xử lý phát hành và sửa lỗi một cách suôn sẻ. Dưới đây là tổng quan về Git Flow:
1. Nhánh Chính (Main Branches)
- main (or master): Nhánh (branch) sẵn sàng cho production, chứa mã ổn định đã được deploy. Tất cả các bản phát hành (releases) được đánh tag tại đây.
- develop: Nhánh phát triển chính nơi mã mới nhất cho bản phát hành tiếp theo được tích hợp. Các tính năng và sửa lỗi được hợp nhất vào
develop
.
2. Nhánh Hỗ Trợ (Supporting Branches)
Git Flow sử dụng các nhánh bổ sung cho phát triển tính năng, sửa lỗi và phát hành. Mỗi nhánh có vai trò cụ thể:
-
Feature Branches (
feature/
):- Dùng để phát triển các tính năng mới .
- Được tạo từ
develop
và hợp nhất lại vàodevelop
khi hoàn thành. - Ví dụ:
feature/new-login
-
Release Branches (
release/
):- Dùng để chuẩn bị bản phát hành mới (new release).
- Được tạo từ
develop
khi hoàn tất các tính năng, cho phép thử nghiệm cuối cùng, sửa lỗi và gắn phiên bản (tag version) trước khi hợp nhất vàomain
. - Ví dụ:
release/v1.0
-
Hotfix Branches (
hotfix/
):- Dùng để sửa lỗi nghiêm trọng trên production.
- Được tạo từ
main
và hợp nhất lại vào cảmain
vàdevelop
để đảm bảo sửa lỗi áp dụng cho cả hai nhánh. - Ví dụ:
hotfix/fix-payment-bug
3. Quy Trình Git Flow
- Phát triển tính năng: hà phát triển tạo nhánh
feature/
từdevelop
để làm việc trên tính năng mới. Sau khi hoàn thành, tính năng sẽ được hợp nhất lại vàodevelop
. - Phát hành: Khi
develop
ổn định và sẵn sàng phát hành, một nhánhrelease/
được tạo để kiểm tra và điều chỉnh cuối cùng. Khi đã sẵn sàng, nó được hợp nhất vàomain
(for production) vàdevelop
(để cập nhật). - Sửa lỗi Hotfixes: Nếu phát hiện lỗi nghiêm trọng trên production, một nhánh
hotfix/
được tạo từmain
, sửa lỗi, và sau đó hợp nhất vào cảmain
vàdevelop
để giữ cả hai nhánh được cập nhật.
4. Tag Phiên Bản (Version Tags)
Sau khi hợp nhất một release/
hoặc hotfix/
vào main
, bạn gắn tag cho commit với số phiên bản tương ứng (ví dụ: v1.0
) để đánh dấu bản phát hành (release).
Tóm Tắt Các Lệnh Git Flow Quan Trọng
- Bắt đầu một tính năng mới:
git checkout -b feature/xyz develop
-
Hoàn thành một tính năng:
git checkout develop && git merge feature/xyz
-
Khởi tạo một bản phát hành release:
git checkout -b release/v1.0 develop
-
Hoàn tất bản release:
git checkout main && git merge release/v1.0
-
Khởi tạo một hotfix khi có lỗi:
git checkout -b hotfix/fix-bug main
-
Hoàn tất hotfix:
git checkout main && git merge hotfix/fix-bug
Git Flow rất lý tưởng cho các team cần một quy trình có cấu trúc bài bản để quản lý mã nguồn. Cảm ơn bạn đã xem hết.