- vừa được xem lúc

Một số cách merge code trong git

0 0 15

Người đăng: kentrung

Theo Viblo Asia

Bài viết sau mình sẽ không nêu ra lí thuyết của sự khác nhau giữa các cách mà thông qua ví dụ và hình ảnh sẽ giúp các bạn hiểu nhanh vấn đề khi merge nhánh.

1. Tạo folder git-origin

  • Tạo mới folder git-origin, folder này để làm mẫu cho các ví dụ bên dưới
  • Khởi tạo git bằng câu lệnh git init
  • Mặc định lúc này chúng ta đang ở nhánh master
  • Tại nhánh master ta tạo các commit là A1A2
  • Tại commit A2 ta bắt đầu tạo nhánh branchB: git checkout -b branchB
  • Tại nhánh branchB ta tạo commit B1
  • Quay lại nhánh master ta tạo commit A3A4
  • Quay lại nhánh branchB ta tạo commit B2
  • Như vậy nếu tính theo dòng thời gian ta có lịch sử commit là: A1 => A2 => B1 => A3 => A4 => B2
  • Tổng kết:
    • Có 2 nhánh là masterbranchB
    • Nhiệm vụ là merge nhánh branchB vào nhánh master
    • Nhánh master màu xanh: A1 => A2 => A3 => A4
    • Nhánh branchB màu đỏ: B1 => B2
    • Hiện tại con trỏ HEAD đang đứng tại nhánh master commit A4
    • Nhìn dưới dạng Git Graph như sau:

2. Git merge

  • Chuyển sang nhánh master: git checkout master
  • Lúc này đang đứng tại commit A4
  • Merge nhánh branchB vào master: git merge branchB
  • Nếu không có conflict thì việc tự động merge thành công
  • Tại nhánh master xuất hiện thêm commit có nội dung: Merge branch 'branchB'
  • Sau khi merge: A1 => A2 => B1 => A3 => A4 => B2 => commit merged

3. Git rebase v1

  • Chuyển sang nhánh branchB: git checkout branchB
  • Lúc này đang đứng tại commit B2
  • Rebase nhánh master vào branchB: git rebase master
  • Chuyển sáng nhánh master: git checkout master
  • Merge nhánh branchB vào master: git merge branchB
  • Lúc này tất cả commit của branchB sẽ được nối tiếp vào sau commit cuối A4 của nhánh master
  • Sau khi rebase: A1 => A2 => A3 => A4 => B1 => B2

4. Git rebase v2

  • Chuyển sang nhánh master: git checkout master
  • Lúc này đang đứng tại commit A4
  • Rebase nhánh branchB vào master: git rebase branchB
  • Lúc này tất cả commit của branchB sẽ được nối tiếp vào master tại commit bắt đầu rẽ nhánh là A2
  • Sau khi rebase: A1 => A2 => B1 => B2 => A3 => A4

5. Git cherry-pick

  • Có một cách nữa khá thủ công để merge code vào nhánh master là dùng git cherry-pick
  • Ý tưởng chính của nó là lựa chọn commit ở nhánh bất kì và áp dụng vào nhánh master
  • Để làm được điều đó bạn cần biết ID của commit
  • Tại branchB ta đang có 2 commit là B1B2
  • CommitId ở dạng rút gọn lần lượt là 38dc36c45dfa5082
  • Cách làm như sau
  • Chuyển sang nhánh master: git checkout master
  • Lúc này đang đứng tại commit A4
  • Pick các commit B1B2 áp dụng vào master: git cherry-pick 38dc36c4 5dfa5082
  • Lúc này 2 commit B1B2 sẽ được nối tiếp vào sau commit cuối A4
  • Sau khi rebase: A1 => A2 => A3 => A4 => B1 => B2

6. Kết luận

  • Git merge sẽ chuyển toàn bộ commit ở branchB vào master, tạo ra 1 commit thông báo merged thành công, thứ tự commit theo thời gian.
  • Git rebase sẽ chuyển toàn bộ commit ở branchB vào master, không tạo ra commit merged, thứ tự commit tùy thuộc cách áp dụng rebase
  • Git cherry-pick thì chỉ chọn một số commit ở branchB áp dụng vào master, không tạo ra commit merged, các commit được nối tiếp vào nhánh master

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đặt tên commit message sao cho "tình nghĩa anh em chắc chắn bền lâu"????

. Lời mở đầu. .

1 1 737

- vừa được xem lúc

Tập hợp những câu lệnh GIT hữu dụng

Dưới đây là một vài ví dụ về các câu lệnh Git mà tôi thường dùng. git config --global user.name "John Doe". git config --global user.

0 0 68

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 2): Trigger một work flow

Events trigger. Bạn có thể cấu hình cho workflows chạy khi có một sự kiện nào đó xảy ra trên GitHub, theo một lịch có sẵn hoặc cũng có thể là một sự kiện nào đó xảy ra ngoài GitHub.

0 0 80

- vừa được xem lúc

Cấu hình CI/CD với Github (phần 1): Một ít lý thuyết

CI/CD là gì. Về mặt khái niệm là vậy nhưng về mặt triển khai thì CI/CD là quá trình tự động thực hiện các quá trình build, test, release, deploy khi có các trigger như commit/merge code lên một branch định sẵn hoặc có thể là tự động chạy theo một lịch cố định.

0 0 128

- vừa được xem lúc

Giới thiệu về Git LFS

. Git LFS là gì . Git LFS làm điều này bằng cách thay thế các tệp lớn trong repo của bạn bằng một con trỏ nhỏ.

0 0 37

- vừa được xem lúc

Git workflow được Google và Facebook sử dụng có gì hay ho

Với developer thì Git hẳn là công cụ rất quen thuộc và không thể thiếu rồi. Thế nhưng có mấy ai thực sự hiểu được Git.

0 0 85