- Khi là member trong 1 Project nhiều người
- VD: Project chung: https://github.com/duyk30b/demo-project.git
1. Pull source về Local
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
git init git remote add origin https://github.com/duyk30b/demo-project.git //Trong github có thể có nhiều nhánh. VD: master, developer, feature //Trường hợp này, chỉ được lấy code từ nhánh "developer" về git pull origin developer git branch -a //Bây giờ ta sẽ thấy tất cả các nhánh //Chú ý: -- Các nhánh trên local màu xanh. Dấu * thể hiện đang làm việc ở nhánh nào ==> Ví dụ: *developer -- Các nhánh trên remotes màu đỏ ==> Ví dụ: remotes/origin/developer -- Và để phân biệt nhánh "developer" trên remotes, và "developer" trên local. Git đã tự thêm: + Chữ "remotes", và chữ "origin". Ví dụ: developer ==> remotes/origin/developer + Khi làm việc với các nhánh trên remotes => thường làm việc với tên: "origin/developer" |
2. Tạo nhánh của mình
-- Tại local, thường thì ko sửa trực tiếp trên nhánh "developer", nhánh này có nhiệm vụ pull code về để xem code mới
-- Ta cần phải tạo ra một nhánh phụ mới, và sửa trên một nhánh phụ đó
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//Liệt kê các nhánh hiện tại --> Đương nhiên ban đầu local chỉ có nhánh: *developer git branch -a //Tạo thêm nhánh mới: feature/yourname git branch feature/yourname git checkout feature/yourname git branch //Đã tạo nhánh chuyển nhánh: developer và nhánh: *feature/yourname //Bolus: git checkout -b feature/yourname => Vừa tạo nhánh vừa chuyển sang nhánh mới làm việc //Khi muốn xóa nhánh "feature/yourname", phải quay về nhánh *developer rồi xóa git checkout developer git branch -d feature/yourname //Chỉ còn nhánh: *developer |
3. Lưu lại phiên làm việc bằng git stash
-- Khi các file đang làm việc ở trạng thái modified hoặc ở staging
==> không thể chuyển nhánh, merge, rebase ...
==> cần commit các file đó, hoặc giải pháp đơn giản hơn là stash
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//Kiểm tra những stash đã lưu git stash list //Lưu lại stash git stash ---> Lưu đơn giản git stash save ---> Giống git stash git stash save "message stash" ---> Lưu stash mới message //Sau khi commit hay quay về nhánh, hay làm gì gì đó đã xong, muốn lấy lại code trên stash về làm tiếp git stash apply ---> apply stash gần nhất là stash@{0} git stash apply stash@{1} ---> apply stash theo id được chỉ định //Có thể Xóa các stash đã lưu: git stash clear ---> xóa hết git stash drop ---> xóa stash gần nhất git stash drop stash@{1} ---> xóa stash theo id được chỉ định //Có thể vừa apply stash, vừa xóa stash bằng prop git stash pop ---> apply stash gần nhất là stash@{0} và xóa luôn stash@{0} git stash apply stash@{1} ---> apply stash và xóa luôn stash theo id được chỉ định |
4. Update code mới nhất tại remotes
4.1. Fetch code mới nhất từ remote
1 2 3 4 5 6 7 |
//Kiểm tra version các commit tại tất cả các nhánh, xem vị trí đứng của mỗi nhánh đang ở đâu git log --all -10 --oneline --graph //Update thông tin mới nhất các nhánh trên remotes git fetch //Lúc này, các nhánh trên remote đã có khá nhiều commit mới, cần kiểm tra lại git log --oneline -10 remotes/origin/developer |
4.2. Update code tại nhánh developer (local)
-- Có 2 cách update code mới, dùng merge hoặc dùng rebase
-- Chọn cách rebase sẽ làm code clean hơn rất nhiều -> khuyên dùng
-- Nhánh *developer là nhánh ko làm việc ==> update mà ko xảy ra conflict -> dùng rebase cho tiện
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
//Chuyển sang nhánh *developer git branch git checkout developer //Cách 1. Dùng Rebase: "Rebase" code từ nhánh origin/developer vào developer(local). git rebase origin/developer //Cách 2. Dùng merge: "Merge" code từ nhánh origin/developer vào developer(local) // Cách này sẽ tạo ra 1 commit mới, là commit: merge code từ origin/developer vào developer git merge origin/developer //Cách 3. dùng Pull: Pull code ở nhánh developer(remotes) về, sau đó merge code vào nhánh hiện tại là developer(local) git pull github developer //Kết quả: nhánh *developer đang ở trạng thái giống hệt trên remote: origin/developer |
5. Update code tại nhánh feature/yourname
5.1. Chuyển về nhánh đang làm việc: feature/yourname
1 2 3 4 |
git branch git checkout feature/yourname //Kiểm tra xem vị trí commit đang ở đâu git log --oneline -10 feature/yourname |
5.2. Gộp tất cả các commit từ khi rẽ nhánh với remotes thành 1 commit duy nhất
1 2 3 4 5 6 7 |
//Kiểm tra vị trí rẽ nhánh git log --all -10 --oneline --graph //giả sử số lượng các commit muốn gộp là 3 git rebase -i HEAD~3 //Xuất hiện 2 file cần chỉnh sửa. //Edit_1: chọn các commit mới nhất để gộp ==> chuyển từ "pick" => "squash" //Edit_2: Sửa các message của commit |
5.3. Update code tại nhánh feature/yourname(local)
-- Update code: Có thể dùng rebase hoặc merge tương tự như phần 4.2.
-- Có thể update code từ nhánh "developer" hoặc nhánh "origin/developer" đều được
-- Thường thì nhánh này mình hay làm việc, sẽ xảy ra conflict
1 2 3 |
-- Khi dùng rebase, cần fix các conflict ==> Sau đó continue đến khi xong git rebase origin/developer git rebase --continue |
6. Push code lên Remotes
-- Khi push code lên, mình chỉ được push lên nhánh chính mình quản lý: "feature/yourname"
1 2 3 |
git add . git commit -m "Company-[DEV]-TaskName" -m "create function ABC" git push --set-upstream github feature/yourname |
-- Khi làm việc nhóm, thường thì mỗi lần push request 1 commit mà thôi
-- Như vậy, sau khi push commit lên rồi, cần update lại push cũ ==> dùng --amend
1 2 3 4 |
//Gộp vào commit trước bằng lệnh: --amend git add . git commit --amend "Company-[DEV]-TaskName" -m "update create function ABC" git push |