Git patch là một lệnh cực kì hữu ích cho việc sao lưu code cũng như dùng để chia sẻ những code base cho đồng nghiệp mà không cần phải đẩy code lên nhánh remote.
Mục Lục
Một số usecase cần sử dụng git patch
- Bạn có code base và muốn chia sẻ cho đồng nghiệp, nhưng không muốn đẩy code của bạn lên nhánh remote vì nó chưa hoàn chỉnh
- Bạn fixbug hộ đồng nghiệp trên máy của mình, sau đó muốn gửi phần code đã fixbug đấy cho đồng nghiệp, để người ta lấy về và tự xử lý tiếp
- Khi có cậu đồng nghiệp đẩy code nhầm vào nhánh của bạn, trước khi revert những commit đó thì bạn muốn sao lưu lại và gửi cho người ta, để người ta đem đẩy vào nhánh khác
- ….
Tạo bản vá khi code ở trên remote
Trước tiên git log để xem mình cần lấy những commit nào để tạo bản vá, giả sử mình khoanh đỏ ba cái commit_id như hình trên.
Khi cần tạo một bản vá từ 1 trong ba commit này thì dùng lệnh sau:
git format-patch -1 commit_id --stdout > output.patch
Nếu cần tạo bản vá từ nhiều commit thì dùng lệnh sau:
git format-patch -n commit_1 commit_2 commit_3 --stdout > output.patch
với n
là số lượng commit mà bạn cần tạo bản vá, có bao nhiêu commit thì khai báo bấy nhiêu, còn output.patch
sẽ là tên của file đích bạn muốn tạo.
Như ảnh trên là mình dùng command sau:
git format-patch -3 64d15ae6280572de9c0a5a8bf22a5d484711ca7a b87f5298ceac79162ced690ed377a78c6ce8f1f5 243477ceb446a9ec03cf42f1ecef5f7e7dbea834 --stdout > file_destination_3_commit.patch
Ở trên là trường hợp khi code đã được đẩy lên nhánh remote rồi, thì các bạn tạo các bản vá như thế và gửi cho đồng nghiệp thôi (cách apply bản vá thì ở cuối mình sẽ đề cập).
Tạo bản vá khi code nằm trên local repository
Bây giờ khi code nằm trên nhánh local của bạn, bạn xử lý xong vấn đề và muốn tạo bản vá để gửi cho người khác thì về bản chất cũng chỉ là lấy đúng commit_id ở phần Stage Area và tạo ra file patch rồi gửi đi thôi.
Trước tiên các bạn tạo ba commit ở local và gửi lên Stage Area, đoạn này dễ quá nên mình không làm (chỉ là thêm hoặc sửa file, git add rồi commit thôi, nhưng đừng push)
Sau đó dùng git reflog
để xem log, ở đây mình đã tạo sẵn 3 commit để demo:
Các bạn có thể thấy mình tạo ra ba commit vào khu vực Stage Area gồm có: a31a948, afcbbae, 0516425
. Giờ mình sẽ tạo file patch từ hai commit a31a948
và afcbbae
bằng command sau:
git format-patch -2 a31a948 afcbbae --stdout > file_from_local_repository.patch
Apply những thay đổi từ bản vá
Ok bây giờ bạn đã tạo xong những bản vá đó rồi, giờ cần apply những thay đổi đó vào nhánh target thì làm như sau:
Sử dụng command: git apply <đường dẫn file patch>
để áp dụng những thay đổi từ bản vá vào nhánh đích.
ví dụ ban nãy mình tạo một bản vá tên là: file_from_local_repository.patch
từ branch feature/demo-patch-local
, giờ mình sẽ apply những thay đổi trên bản vá này sang branch master
, các bạn theo dõi hình bên dưới:
Vậy là branch master
đã có những thay đổi (phần khoanh đỏ) từ bản vá được tạo từ branch feature/demo-patch-local
rồi, giờ các bạn xử lý tiếp thôi.
Một số bài viết liên quan:
- Biết sử dụng git cherry-pick để làm việc hiệu quả hơn
- Git revert với Git reset hoạt động như thế nào?
- Git stash giúp bạn trở nên chuyên nghiệp như thế nào
- Crack Intellij IDEA Ultimate version 2022
- Distributed Lock with Hazelcast and Spring
- How to build Rate Limit with Hazelcast and Spring Boot
- Câu chuyện phỏng vấn online mùa Covid
- Series tìm hiểu System Design
- Series tìm hiểu Hazelcast
- Series tìm hiểu lập trình java
- Series crack Intellij IDEA
- Series tìm hiểu Docker
- Series tìm hiểu Git
- Series tìm hiểu Kafka
- Series tìm hiểu ElasticSearch
- Series tìm hiểu Linux
- Series phỏng vấn kĩ sư phần mềm
- Series review sách