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
.
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
- 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
.
Và ngay phía dưới đó là commit FIX CONFLICT
có revision number là 3091d4f7
.
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.
4. Apply patch
All done.
V. References
____________________
< Thanks for reading >
--------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| |
All rights reserved