+1

Intellij in action: Clone multiples commit in difference branches.

I. Prerequisite

IntelliJ IDEA (v 2022.3.2) or from some version onward/backward.

II. Problem

Chúng ta có bài toán sau: bạn được giao nhiệm vụ tích hợp Salesforce vào dự án bằng cách clone phần code có sẵn từ dự án khác tuy nhiên phần code Salesforce của dự án kia dàn trải trên nhiều commit và nhiều branch khác nhau khiến bạn không thể squash thành 1 commit được. Bạn có thể lần theo từng commit để code, nhưng nếu trong trường hợp một vài tập tin có nhiều revision (được chỉnh sửa nhiều lần) thì việc này trở nên tương đối phiền phức. Vậy thì có cách nào để xem revision cuối cùng của tất cả tập tin của những commit đấy không? Câu trả lời là có bằng cách sử dụng git patch.

image.png

Chúng ta cần patch tất cả commit trong hình trên là từ commit có revision number là 78de07d4 ngày 31/10/2022 cho đến commit có revision là 38a442d3 ngày 05/01/2023.

III. Git patch là gì?

A patch file represents a single set of changes that can be applied to any branch, in any order. By using patch, you will get differences between one or more files. And later, you can apply the differences (patch) to get the changes on new files.

IV. Solution

Idea cơ bản về solution đó chính là collect những commit cần thiết thành một bản vá (patch) lưu ra file .patch/ clipboard sau đó checkout commit ở ngay trước commit có revision number là 78de07d4 rồi apply patch data vào. Vì bản vá là single set of changes nên chúng ta sẽ thấy được những thay đổi cuối cùng của tất cả các tập tin trong những commit đã chọn. That's it.

1. Tạo patch

image.png

  • Select commit => Right click => Create Patch
  • Select commit => CTRL + SHIFT + A (Help|Find Action) => Create Patch

2. Tìm commit gần nhất ngay trước commit cũ nhất của patch (78de07d4)

Đầu tiên chúng ta cần tìm commit 78de07d4.

image.png

Và ngay phía dưới đó là commit FIX CONFLICT có revision number là 3091d4f7.

image.png

3. Checkout commit (3091d4f7)

Việc checkout commit gần nhất sẽ giúp chúng ta giảm thiểu số lượng conflict khi apply patch.

image.png

4. Apply patch

image.png All done.

image.png

V. References

  1. IDEA - Create patch from commit
 ____________________
< Thanks for reading >
 --------------------
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     |

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí