Git Flow

Chia sẻ qua:

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.