git branch và mô hình pull request (Phần 1)

Tình huống

Hệ thống đang chạy ổn định, khách hàng muốn thử nghiệm tính năng mới foo, bạn bắt tay vào code tính năng mới này. Một ngày đẹp trời nọ, khi bạn đang code nửa chừng tính năng foo, khách hàng yêu cầu: công ty chúng tôi quyết định tính năng khác nữa bar mới là mục tiêu cần kíp nhất lúc này, vậy bạn hãy tạm dừng tính năng foo và chuyển sang làm bar. Khách hàng là thượng đế mà, muốn chửi nó lắm những vẫn nhe răng cười thôi. Bây giờ bạn tính sao? Đang code nửa chừng rồi không lẽ revert về giai đoạn chưa làm, để làm tính năng mới? Hay là copy rồi sao lưu code?
Git cung cấp cho ta giải pháp rẽ nhánh (branch) để giải quyết những trường hợp này (và nhiều trường hợp khó nhằn khác).
Ở phần 1, chúng ra sẽ tìm hiểu về git branch.

Branch?

Branch là nhánh, khi bạn tách ra một nhánh mới để làm (vd: foo), nhánh mới sẽ thừa hưởng code của nhánh gốc, ngay tại thời điểm bạn tạo nhánh mới. Mọi thay đổi ở nhánh này sẽ không ảnh hưởng gì đến nhánh khác. Ở tình huống đầu bài, bạn chỉ việc quay về nhánh chính (thường là master hoặc development) và tạo nhánh mới bar và phát triển tính năng bar.
Lưu ý Bạn phải quay về nhánh master vì nếu ở nhánh foo thì nhánh bar sẽ chứa luôn cả những đoạn code dang dở của nhánh foo.

Thao tác với branch

Trước hết tạo một dự án mới

Xin mê: Sao lại là gh mà không phải origin như tôi vẫn thường thấy/làm?
Mời bạn đọc bài viêt này
Cái link git tôi thấy cũng lạ lạ, sao không có HTTPS?
Ở đây mình sử dụng giao thức ssh, mời đọc bài viết Tạo ssh key và sử dụng ssh key trong git của mình để hiểu hơn
Khi mới tạo dự án thì chưa có branch nào được tạo, nên mình sẽ tạo branch gốc, thường thì tên nó sẽ là master
Tạo và chuyển sang branch mới

Tham số -b là để tạo branch nếu chưa có, nếu có rồi sẽ có lỗi fatal: A branch named 'foo' already exists.
Chuyển sang branch sẵn có

Tạo một file và add vào index, sau đó commit (lệnh commit sẽ add file vào branch hiện tại)

Tạo và huyển sang nhánh foo, sau đó tạo một file mới, add và commit nó vào branch foo

Đến đây, trong thưc mục gốc của mình sẽ có hai file: file_in_master và file_in_foo

Thử chuyển về master xem nào:

Tada, file_in_foo đã “ở lại” foo branch rồi 😀
Lưu ý File và những thay đổi trong file chỉ thực sự thuộc về branch hiện tại khi bạn đã add và commit nó vào branch. Nếu chỉ add không cũng không được. Thử tí nhé:

Bạn có thể thấy là new_file_in_master nó vẫn theo lệnh switch đi sang foo branch. Thực tế là do file này chưa thuộc về bất cứ branch nào cả, nó vẫn ở đó thôi, và mọi branch đều có quyền truy cập và tương tác vào nó (kể cả khi bạn đã add nó vào git index bằng lệnh git add new_file_in_master). Do đó, bạn hoàn toàn có thể chỉnh sửa, add, và commit nó lên foo branch:

Ố ồ, new_file_in_master đã ở lại bên foo branch rồi, mặc dù nó được tạo ra từ master branch.
Quay lại vấn đề chính nào.

Giải quyết yêu cầu đầu bài

Điểm lại, bây giờ ta đã có hai branch:
* master với file_in_master
* foo với 3 file: file_in_master, file_in_foonew_file_in_master
Bây giờ khách hàng yêu cầu làm tính năng bar, thì mình về lại master và tạo bar branch

Vậy là bar branch sẽ gồm những tính năng đã có ở master, đồng thời có thêm những tính năng mới của bar, còn foo mình đang phát triển dở thì nó vẫn ở bên kia.
Để làm tiền đề cho bài viết tiếp theo, chúng ta push code ở master lên server:

Đến đây, bạn đã hiểu về git branch, vậy mô hình pull request là gì, và nó giúp ích được gì cho ta, nó có liên quan gì đến git branch. Mời bạn đọc tiếp phần hai: Mô hinh pull request và cách làm việc

Lập trình và hơn thế nữa

Spread the love
  • 5
  •  
  •  
  •  
  •  
    5
    Shares

Leave a Reply

4 Comments on "git branch và mô hình pull request (Phần 1)"

avatar
  Subscribe  
newest oldest most voted
Notify of
trackback

[…] phần trước chúng ta đã hiểu về git branch. Phần này, chúng ta sẽ đi tìm câu trả lời cho […]

trackback

[…] bạn đã có kiến thức căn bản về git branch. Nếu chưa, vui lòng đọc bài viết git branch và mô hình pull request trước khi tiếp […]

trackback

[…] 4. Xoá file đã tồn tại trong git và cập nhật gitignore giữa chừng dự án 5. git branch và mô hình pull request (Phần 1): git branch 6. git branch và mô hình pull request (Phần 2): pull request 7. git conflict và cách giải […]

Trung
Guest

hay quá anh ơi 🙂