Git Flow
Overview
Làm việc với git là điều gần như bắt buộc với lập trình viên ngày nay. Vậy bạn cần làm gì khi được yêu cầu thêm tính năng mới vào một project có sẵn. Sau đây mình sẽ hướng dẫn chi tiết các bước khi thêm một tính năng mới khi làm việc với git.
Các khái niệm cần biết:
<1> Repository (Repo): Kho lưu trữ nơi các bạn lưu trữ code của mình. Cụ thể hơn với github bạn tạo repository mới tại đường dẫn https://github.com/new và đặt tên cho nó.
<2> Repository chính: Mỗi một project sẽ có một repository chính thường được teamlead hoặc techlead khỏi tạo và thường bạn sẽ không có quyền push code lên trên repository này.
<3> Repository cá nhân: Đây là repository của bạn bạn có thể khởi tạo repository mới hoặc fork code từ một repository khác về.
<4> Local: Máy của bạn
<5> Remote: Cặp tên và repository tương ứng. Ví dụ: Mặc định khi bạn clone code từ URL-A thì chúng ta sẽ có 1 remote là origin: URL-A
Các bước thực hiện khi thêm tính năng mới
B1: Fork repository chính về repository cá nhân (Vì chúng ta thường không được push code lên repo chính nên ta sẽ fork cả project đó về repository cá nhân).
B2: Clone repo git cá nhân về máy
git clone git-url
Ví dụ: git clone http://github.com/truongnq/demo.git
B3: Add thêm repo chính vào remote server để update code mới nhất trên repo chính
git remote add remotename git-url
Ví dụ: Mình sẽ add thêm remote chính của công ty và đặt tên là *main* git remote add main http://github.com/company-abc/demo.git
B4: Tạo branch từ nhánh develop
git checkout -b <tên nhánh mới> [nhánh gốc]
git checkout -b feature/ten-chuc-nang-moi develop
B5: Chuyển qua nhánh mới tạo (Chúng ta sẽ code trên nhánh này ko động vào nhánh develop) (Khi thực hiện bước 4 thì mặc định bạn sẽ được chuyển sang nhánh mới được tạo nên có thể bỏ qua bước này)
git checkout <tên nhánh cần chuyển>
git checkout feature/ten-chuc-nang-moi
B6: Sau khi code xong chức năng thực hiện lấy code mới nhất từ repo chính về nhánh develop.
git checkout <tên nhánh cần chuyển tới>
git checkout develop
git pull <tên repo chính> <tên branch>
git pull main develop
Bạn phải thực hiện lấy code từ repository chính vì có thể trong quá trình bạn code thì code trên nhánh develop ở repository chính đã được update rồi.
B7: Rebase hoặc merge nhánh mới với develop
Chuyển qua nhánh bạn vừa mới code:
git checkout feature/ten-chuc-nang-moi
Tiến hành rebase (git rebase sẽ đem những commits bên trong nhánh feature/ten-chuc-nang-moi và cập nhật vào sau commit mới nhất trong nhánh develop)
git rebase <tên nhánh muốn áp dụng lại>
git rebase develop
Thay vì rebase bạn cũng có thể merge code:
git checkout feature/ten-chuc-nang-moi
git merge develop
B8: Push nhánh chức năng vừa tạo lên repository git cá nhân
git push <tên remote cá nhân> <tên nhánh> (xem các remote có sẵn bằng git remote)
git push origin feature/ten-chuc-nang-moi
B9: Vào git cá nhân Create merge request(gitlab) hoặc pull request(github) Bạn tạo pull request từ nhánh mới tạo của mình và chọn nhánh đích là nhánh develop trong repository chính để chờ review và merge.