Workflow cơ bản của Git
Tiếp nối bài trước, trong bài này mình sẽ đề cập đến 1 workflow làm việc cơ bản với git.
Bắt đầu
Để bắt đầu làm việc với Git, nếu bạn là người start project thì bạn cần tạo 1 repository mới với:
$ cd your-project/
$ git init
Trong trường hợp đã có repository, thì bạn cần clode repository đó về máy:
$ git clone git@github.com:haposoft/your-project.git
$ cd your-project
Nhánh hiện tại bây giờ đang là master
(hoặc main
tùy thuộc setting), trong trường bạn cần làm 1 feature mới hay fix bug, hãy tạo 1 nhánh mới để làm các công việc đó thay vì thao tác trên nhánh master
.
Có 1 vài lý do như sau:
- Trong quá trình bạn đang làm việc, nếu có bug, bạn có thể commit code ở nhánh bạn mới tạo, quay trở lại master để fix bug
- Code của bạn chưa xong nhưng ở nhánh master có code của thành viên mới cần merger để bạn có thể code tiếp.
- Code của bạn cần được review trước khi các thành viêc khác của team có thể pull code mới của bạn về.
- Sau khi push code, bạn muốn thay đổi code của bạn mà không làm ảnh hưởng đến các member khác.
- Xem lại lịch sử code theo nhánh 1 cách dễ dàng hơn.
Đó là 1 vài lý do mà tại sao bạn phải tạo 1 nhánh mới khi bạn muốn thay đổi hay thêm mới trong code.
Chúng ta sẽ tạo 1 nhánh mới và đồng thời chuyển sang nhánh đó để thực hiện code bằng câu lệnh:$ git checkout -b new-branch
Sau khi thực hiện code xong, kiểm tra lại status của nhánh hiện tại để xem xem có những file nào thay đổi, file nào được thêm mới để thực hiện
add
vàcommit
$ git status
Add các file bạn tạo mới trước khi
commit
$ git add file-name // thêm các file trong 1 thư mục $ git add folder-name/ // thêm tất cả các file mới (cẩn thận với cách add này dễ gây thừa file) $ git add .
Thực hiện commit :
Lưu ý trong nội dung message của commit bạn nên ghi tóm tắt những công việc hoặc thay đổi mà bạn đã làm trong commit đó.$ git commit -m "message for change"
Trước khi thực hiện push code lên, bạn cần pull code ở nhánh master để kiểm tra xem có các thay đổi mới nào không.
Như mình đã chia sẻ trong các bài trước:Khi thực hiện git pull áp dụng (merge) các thay đổi này vào thư mục và tập tin ở working directory. Git pull sẽ có thể gây ra xung đột (conflict) trong khi merge.
$ git pull origin master
$ git pull --rebase origin master
Nếu gặp conflict, bạn cần fix hết tất cả các confict. Sau đó thực hiện commit lại 1 lần nữa.
$ git commit -m `fix conflict`
$ git push origin new-branch
Mở rộng về conflict
Mình sẽ giới thiệu thêm 1 chút về conflict trong Git là gì?
Conflict có nghĩa là xung đột, conflict có thể xuất hiện khi thực hiện hợp nhất đoạn code vào branch mà có thay đổi code tại cùng 1 điểm trong cùng 1 file. Để hiểu đơn giản nhất thì ta cùng xem ví dụ sau:
Khi mình thực hiện câu lệnh git pull origin master
trên branch add_new_file
là lúc mình thực hiện hợp nhất trên branch master
với branch add_new_file
mà trên add_new_file
file index.html
đã thay đổi tại các line từ 2 -> 12 hoặc từ 14 -> 24(như hình dưới).
và khi hợp nhất code, git sẽ so sánh, thấy tại file index.html
, git sẽ không biết sẽ lấy đoạn code nào như ví dụ sẽ là từ 2 -> 12 hay từ 14 -> 24. Lúc này việc của chúng ta là giải quyết conflict.
Cấu trúc của conflict
<<<<<<< HEAD
// Code current change here
=======
// Code Incoming change here
>>>>>>> Commit
Với Code current change here là code tồn tại trong nhánh master
hiện tại mà tham chiếu HEAD đang trỏ tới.
Và Code Incoming change here là code có trong nhánh add_new_file
chuẩn bị hợp nhất vào master
.
Giải quyết conflict
Để giải quyết conflict, bạn cần xóa hết <<<<<<< HEAD
, =======
, >>>>>>> Commit
và chọn dòng code mong muốn. Sau đó thực hiện commit và push lên bình thường.
Thực hành
Để hiểu rõ flow làm việc ở trên, các bạn có thể thực hành một số bài tập dưới đây.
Bài tập 1
: Làm theo flow làm việc git cơ bản và push lên repo tutorial
tại đây
Bài tập 2
: Xử lý conflict, thực hiện xử lý conflict theo các bước sau:
- pull code trên
master
- checkout sang branch
add_new_file
- thực hiện pull origin master
- thực hiện xử lý conflict
- push lên master
Trên đây, mình vừa giới thiệu về 1 flow làm việc cơ bản của git. Trong bài tiếp theo mình sẽ giới thiệu các kiến thức về github
.
(Link bài tiếp theo của series tại đây)
Ngoài ra, các bạn có thể xem lại bài trước của series này, Giới thiệu các khái niệm cơ bản của git
để củng cố thêm kiến thức về git nhé.
(Link bài trước của series tại đây)