Sử dụng Gitflow WorkFlow
git-flow là một tiện ích mở rộng của git, giúp các thao tác trên repository (kho mã nguồn) trở nên dễ dàng và hiệu quả hơn dựa trên mô hình phân nhánh. Tất nhiên là bạn vẫn có thể sử dụng toàn bộ các lệnh thông thường của git. Git-flow chỉ đơn giản là một tập hợp các lệnh mở rộng cho git.
Cài đặt trên macOS
brew install git-flow-avh
Các lệnh thường sử dụng:
1. Khởi tạo
# Có thể clone source code từ server
git clone [url/to/repo.git]
# Di chuyển đến thư mục dự án
git flow init
# Sử dụng toàn bộ các giá trị mặc định
Initialized empty Git repository in ~/project/.git/
No branches exist yet. Base branches must be created now.
Branch name for production releases: [main]
Branch name for "next release" development: [develop]
How to name your supporting branch prefixes?
Feature branches? [feature/]
Release branches? [release/]
Hotfix branches? [hotfix/]
Support branches? [support/]
Version tag prefix? []
Sau quá trình khởi tạo nó sẽ tạo và chuyển đến branch develop
2. Kiến trúc dự án GIT
# The current version in production. If you need the current production version you just check out this branch
master (or main)
# Lưu trữ source trong quá trình dev
develop
# Thư mục lưu trữ các chức năng đang dev của member. Mỗi member nên tạo thư mục con bên trong để lưu trữ chức năng của mình. Vd: feature/[tên]/[tên chức năng]
feature/
# Thư mục lưu trữ các chức năng đang cần hotfix. Nó được base trên branch master. Cũng nên tạo thư mục con tên member bên trong để biết chức năng do ai đang fix
hotfix/
# Thư mục chứa các phiên bản đã phát hành
release/
# Khi sử dụng SourceTree các tên branch có dấu / sẽ được xem như thư mục
2. Phát triển 1 chức năng
# Lệnh này sẽ tạo ra một nhánh mới từ nhánh 'develop' và tự động chuyển sang nhánh mới này.
git flow feature start [member]/[tên chức năng]
# Chúng ta sẽ thực hiện add, commit chức năng
git add .
git commit -m "My commit message"
Không sử dụng git-flow extension
git checkout develop
git checkout -b [member]/feature_branch
3. Push chức năng lên máy chủ
Lệnh sẽ đẩy mã nguồn chức năng của bạn lên máy chủ, để bạn có thể chia sẻ với member khác hay tạo Merge Request để cập nhật mã nguồn vào branch 'develop'.
git flow feature publish [member]/[tên chức năng]
Có thể tạo Merge Request bằng cách remote copy link in ra khi chạy lệnh dán vào trình duyệt.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: To create a merge request for feature/dylanbui/docker-setup, visit:
remote: https://gitlab.com/buivantienduc/php-mvc/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature%2Fdylanbui%2Fdocker-setup
remote:
Chú ý: chỉ dùng lệnh này để push code lên máy chủ tạo Merge Request, không dùng lệnh git flow feature finish
Không sử dụng git-flow extension
# -- Chuyển qua branch develop
git checkout develop
# -- Thực hiện merger source từ feature_branch => develop
git merge [member]/feature_branch
4. Pull chức năng của ai đó về phát triển tiếp hay cập nhật code hiện thời mới nhất
git flow feature pull [remote name] [my feature name]
Chú ý: Khi phát triển xong thì dùng lệnh git flow feature publish để push code lên máy chủ tạo Merge Request, không dùng lệnh git flow feature finish
5. Xử lý hotfix
Sử dụng cho các trường hợp khẩn cấp cần phải sửa đổi ngay trên bản sản phẩm (nhánh master).
Tạo branch hotfix
git flow hotfix start [VERSION] [BASENAME]
Tham số VERSION ở đây chỉ định tên của phiên bản release hotfix này. Còn tham số tùy chọn BASENAME sẽ chỉ định tên nhánh cơ bản thay cho hotfix thay vì nhánh 'master'
Không sử dụng git-flow extension
# -- Chuyển qua branch develop
git checkout master
# -- Tạo 1 phiên bản hotfix từ master branch
git checkout -b hotfix_branch
Release hotfix
git flow hotfix finish [VERSION]
Chú ý: Khi phát triển xong thì dùng lệnh git flow hotfix publish để push code lên máy chủ tạo Merge Request. Build riêng để test hotfix.
Sau khi chạy lệnh hotfix finish. Git sẽ thực hiện:
- Merge lại nội dung thay đổi vào nhánh 'develop' và 'master'.
- Ở nhánh 'master' sẽ được gắn tag là phiên bản của hotfix.
Không sử dụng git-flow extension
# -- Chuyển qua branch master
git checkout master
# -- Merge hotfix vào master
git merge hotfix_branch
# -- Chuyển qua branch develop
git checkout develop
# -- Merge hotfix vào develop
git merge hotfix_branch
# -- Xóa branch hotfix
git branch -D hotfix_branch
Do xử lý thủ công nên khi hotfix ta cần tạo Merge Request vào 'master' gắn tag cho hotfix, sau đó merger 'master' ngược về 'develop'.
6. Release phiên bản
Để bắt đầu một phát hành mới, sử dụng lệnh release của git flow. Lệnh này sẽ tạo ra nhánh '[RELEASE]' từ nhánh 'develop'.
git flow release start [RELEASE]
Không sử dụng git-flow extension
# -- Chuyển qua branch develop
git checkout develop
# -- Tạo 1 phiên bản release từ develop. develop là code đã dev và test xong
git checkout -b release/0.1.0
7. Kết thúc Release
Kết thúc release là một bước lớn trong chiến lược phân nhánh git. Nó thực hiện các việc sau:
- Merge nhánh '[RELEASE]' vào nhánh 'master'
- Gắn tag ở nhánh '[RELEASE]' dành cho bản release
- Merge lại nhánh '[RELEASE]' vào nhánh 'develop'
- Xóa bỏ nhánh '[RELEASE]'
git flow release finish [RELEASE]
Không sử dụng git-flow extension
# -- Chuyển qua branch chuyển qua branch master
git checkout master
# -- Merge phiên bản vừa release vào master
git merge release/0.1.0
Chú ý: Khi phát triển xong thì dùng lệnh git flow release publish [RELEASE] để push code lên máy chủ tạo Merge Request, không nên dùng trực tiếp lệnh git flow release finish [RELEASE]
Tập hợp các lệnh

Tham khảo
Git-Flow, GitHub-Flow, Gitlab-Flow and Trunk Based Development explained