tuannt
Quay lại Blog

Cách giải quyết vấn đề merge và revert trong Git: Cách cherry-pick, tạo diff patch và rebase

Bạn gặp sự cố với Git sau khi merge code và muốn giải quyết vấn đề này? Hãy thử cherry-pick, tạo diff patch hoặc rebase để xử lý.

2 phút đọc
Ngày xuất bản:
Cách giải quyết vấn đề merge và revert trong Git: Cách cherry-pick, tạo diff patch và rebase

Tình huống

Mình đã gặp một tình huống rắc rối với Git. Sau khi thực hiện một merge cho code của mình, mình phát hiện ra một số lỗi. Để giải quyết, mình đã sử dụng lệnh revert.

Tuy nhiên, khi mình thực hiện thay đổi trên một nhánh chức năng khác và cố gắng merge lại, mọi thứ đã không diễn ra như mình mong đợi.

Những thay đổi mà mình đã thực hiện trên nhánh chức năng không được phản ánh đúng. Giờ đây, mình đang cố gắng tìm ra cách giải quyết vấn đề này.

Để giải quyết vấn đề này, mình chia sẻ có một số cách:

Cherry-pick các commit cần thiết

  • Dùng git log trên nhánh chức năng của bạn để tìm các commit mà bạn muốn áp dụng vào develop.
  • Check out nhánh develop.
  • Sử dụng lệnh git cherry-pick [commit-id] để áp dụng từng commit mà bạn muốn từ nhánh chức năng.

Tạo một diff patch và áp dụng nó

  • Trên nhánh chức năng của bạn, tạo một diff của những thay đổi bạn muốn áp dụng: git diff develop..feature-branch > changes.patch.
  • Check out nhánh develop.
  • Áp dụng patch: git apply < changes.patch.

Rebase và giải quyết xung đột thủ công nếu cần

  • Trên nhánh chức năng của bạn, thực hiện: git rebase develop.
  • Giải quyết bất kỳ xung đột nào mà rebase gây ra.
  • Sau khi rebase xong và giải quyết xung đột, bạn có thể thực hiện merge nhánh chức năng vào develop.

Tạo một branch mới và cherry-pick hoặc rebase nhánh chức năng của bạn lên nhánh mới này

Điều này giữ cho lịch sử của nhánh develop không thay đổi và cho phép bạn làm việc trên một "sân chơi" mới mà không lo lắng về các vấn đề có thể phát sinh trên nhánh develop gốc.

Tùy thuộc vào tình hình cụ thể và bạn muốn giữ lịch sử như thế nào, bạn có thể chọn một trong những phương án trên.

Về tác giả

Bài viết liên quan

Cách sử dụng lệnh git reset để loại bỏ files không cần thiết trong Git

Cách sử dụng lệnh git reset để loại bỏ files không cần thiết trong Git

Để loại bỏ các folder hoặc files không cần thiết khỏi việc đã thực hiện git add ., bạn có thể sử dụng lệnh git reset. Lệnh này sẽ không ảnh hưởng đến nội dung của các files; nó chỉ loại bỏ việc files đó được đánh dấu để commit. Dưới đây là cách thực [&#8230;]

Đọc thêm
Làm thế nào để hiển thị danh sách các nhánh (branch) được tạo ra trong khoảng thời gian GIT

Làm thế nào để hiển thị danh sách các nhánh (branch) được tạo ra trong khoảng thời gian GIT

Ở đây mình ví dụ: để hiển thị danh sách các nhánh được tạo cách đây 6 tháng trên remote repository trừ nhánh master và dev, bạn có thể sử dụng lệnh sau: git ls-remote &#8211;heads origin | awk -F &#039;refs/heads/&#039; &#039;{print $2}&#039; | while read branch; do if [ `git log &#8211;format=&quot;%at&quot; &#8211;reverse origin/$branch [&#8230;]

Đọc thêm
Một quy trình để phát triển một tính năng trong 1 dự án có sử dụng GIT

Một quy trình để phát triển một tính năng trong 1 dự án có sử dụng GIT

Để phát triển một tính năng trong một dự án sử dụng Git, bạn có thể tuân theo quy trình sau: Hướng Dẫn Phát Triển Tính Năng Mới Trong Dự Án Sử Dụng Git Bước 1: Tạo Nhánh Mới Để Phát Triển Tính Năng Để bắt đầu, sử dụng lệnh git checkout -b &lt;tên-nhánh&gt; để [&#8230;]

Đọc thêm

Bình luận

Tính năng bình luận sẽ được triển khai trong tương lai.