hotfix bằng git cherry-pick

hotfix bằng git cherry-pick

Tin ngắn hàng ngày dành cho bạn
  • Có 2 phần mềm tiện ích cho Mac mà mỗi khi dùng máy Mac Mini hoặc Macbook có cắm thêm màn hình rời, thêm bàn phím với chuột nữa là BetterDisplayMac Mouse Fix. Đi qua từng cái nhé!

    BetterDisplay giúp tinh chỉnh kích thước của màn hình rời để đạt độ phân giải HiDPI. Như bạn biết Mac khá kén màn hình và tuỳ chọn độ phân giải trong cài đặt mặc định rất ít ỏi, nên BetterDisplay cung cấp nhiều lựa chọn phù hợp hơn.

    Cái thứ hai là Mac Mouse Fix, nếu dùng chuột ngoài bạn sẽ thấy nó cuộn không giống với Trackpad của Macbook cho lắm. Điều kì diệu xảy ra khi cài phần mềm này vào. Nó thêm hiệu ứng "smooth" và giúp cuộn chuột y như cuộn bằng Trackpad luôn. Thật thần kỳ.

    » Xem thêm
  • Mọi người còn nhớ grep.app không? Trang cho phép tìm kiếm mọi thứ trên Github chỉ cần đoạn mã xuất hiện trong cụm từ tìm kiếm. Sơ qua thì trang này đang lưu lại dữ liệu từ Github hay làm thế nào đó rồi mới tìm kiếm được, do đó không phải 100% kho lưu trữ công khai đều xuất hiện trên này.

    Mình phát hiện ra Github cũng có trang tương tự, hơi chậm tí thôi cơ mà tìm kiếm 100% luôn nha 😆. Github Search. Mọi người nhớ bấm vào Code ở mục Filter By bên trái để nó tìm chính xác hơn nhé.

    » Xem thêm
  • Vừa gia hạn tên miền cho 2coffee.dev. Vậy là em nó đã 3 tuổi rồi đó mọi người. Sẵn đây nói luôn...

    Mọi người chắc cũng biết về ý nghĩa của cái tên rồi đúng không. Ấy thế mà nó lại đang dính vào "lời nguyền cà phê" bởi vì tên miền có chứa từ khoá "coffee" rất "hot", làm nhiều người hoặc công cụ tìm kiếm đánh giá sai lệch về nội dung của trang web 🥲. Nhiều lúc mình muốn tìm cách để "khai tử" cái tên này đi, thay bằng tên khác thì con đường bớt chông gai hơn.

    Tiền thân của 2coffee.dev là estacks.icu, ấy thế mà sao lại bỏ được cái tên cũ không chút đắn đo? Là vì 2coffee.dev đánh dấu sự trưởng thành trong tư duy làm sản phẩm của mình, ý là nghiêm túc hơn á. Còn stacks.icu vẫn mãi mãi là tiền thân của "Xin chào, một tách cà phê dành cho mấy ông lập trình viên đây".

    » Xem thêm

Vấn đề

Phải nói rằng từ khi biết dùng git tôi không cần phải copy project ra thư mục mới để "backup" mỗi khi sắp sửa làm một thứ gì đó to lớn. Hồi chưa biết dùng git, cách đó là cách mà tôi có thể nghĩ ra được để bảo vệ mã của mình an toàn trong trường hợp code ra bug còn có đường lui.

Git là một công cụ quản lý phiên bản mà tôi tin rằng hiệu quả cho hầu hết lập trình viên. Tính năng nổi bật của git là cho phép chúng ta tạo ra commit gọi như là "cam kết" đối với từng dòng mã bạn thêm vào. Mỗi cam kết này đều được ghi vào trong lịch sử và có thể dễ dàng xem lại được cũng như đưa mã trở về trạng thái đó.

Đối với mỗi cá nhân, tổ chức lại có các cách sử dụng git khác nhau tạo nên sự đa dạng về flow. Flow là một từ chỉ quy trình làm việc trong git, ví dụ thường thấy nhất: nhánh master là nhánh chính, develop là nhánh phát triển, các nhánh với prefix chứa feature như feature/01, feature/02... là cách nhánh được checkout ra từ develop để liên tục triển khai tính năng mới.

hotfix cũng là một prefix trong nhánh để sửa một lỗi nào đó trong môi trường production. Sau khi release ứng dụng, chẳng may có một lỗi phát sinh buộc chúng ta cần phải sửa ngay lập tức. Bởi những lỗi như thế được được đánh cờ là nghiêm trọng và cần phải được ưu tiên xử lý. Thông thường cách để giải quyết là checkout từ master ra một nhánh hotfix, ví dụ như hotfix/01, tiến hành sửa lỗi, kiểm thử và nếu mọi thứ ổn thỏa thì merge hotfix/01 vào cả hai nhánh develop và master.

Đó là trong trường hợp chúng ta vừa release xong thì phát hiện ra lỗi, hay ít nhất là khoảng thời gian phát hiện ra lỗi ngắn và những thay đổi trên develop chưa quá nhiều so với master. Đặt vấn đề ngược lại, tức là develope đã có quá nhiều thay đổi do team liên tục phát triển tính năng mới, thì lúc đó khả năng hotfix khi merge vào develop sẽ gây ra tình trạng conflic.

Trường hợp này cũng dễ hiểu thôi, vì tính năng mới có thể đã sửa mã ở một nơi nào đó so với master. Và khi master đang "outdate" mà lại merge hotfix được checkout từ master vào thì khả năng xung đột sẽ xảy ra. Để khắc phục trường hợp này, chúng ta cần đến một phương pháp gọi là "cherry pick" để hotfix.

git cherry-pick

`git cherry-pick` là một lệnh trong Git được sử dụng để áp dụng một hoặc nhiều commit từ một nhánh khác vào nhánh hiện tại của bạn. Điều này cho phép bạn áp dụng các thay đổi từ các commit cụ thể mà không cần phải merge toàn bộ nhánh.

Ví dụ, nếu bạn có một commit trên một nhánh phát triển mới nhất đã giải quyết một vấn đề cụ thể mà bạn cần để áp dụng vào nhánh sản phẩm của bạn, bạn có thể sử dụng git cherry-pick để áp dụng commit đó vào nhánh hiện tại.

git cherry pick

Thông thường, nếu merge một nhánh vào nhánh khác git sẽ lấy tất cả thay đổi từ các commit để merge vào. Nhưng với cherry pick ta hoàn toàn có thể chỉ chọn một commit để đưa vào nhánh.

Áp dụng vào trong trường hợp hotfix bên trên. Chúng ta sẽ tạo ra một nhánh hotfix từ develop, sửa mã, commit rồi cherry pick commit đó vào master.

Để giải thích, vì nhánh develop luôn chứa mã mới hơn hoặc bằng với master cho nên nếu tạo hotfix từ develop rồi sửa mã và chỉ "pick" commit đó vào trong master thôi thì sẽ giảm bớt nguy cơ gây xung đột.

Áp dụng ra rộng hơn, cherry pick không chỉ để dành cho hotfix mà còn nhiều trường hợp khác nữa, miễn là khi nào bạn cần "pick" một commit vào một nhánh nào đó mà không phải merge toàn bộ nhánh.

Tổng kết

git cherry-pick được sử dụng để áp dụng một hoặc nhiều commit từ một nhánh khác vào nhánh khác. Trong bài viết này chúng ta đang nói đến việc sử dụng cherry-pick để hotfix đối với trường hợp nhánh develop đã đi quá xa so với master và mang nhiều thay đổi. Nếu merge hotfix từ master vào develop khả năng mã "outdate" sẽ gây conflic trên mã mới, thay vào đó chúng ta tạo hotfix từ develop và cherry-pick commit vào master sẽ giảm nguy cơ gây "xung đột".

Cao cấp
Hello

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (0)

Nội dung bình luận...