Trong git bạn có thể đường ống đầu ra của git-diff
giữa hai cam kết như thế này:
git diff fa1afe1 deadbeef > patch.diff
Gửi patch.diff
cho nhà phát triển và để cho anh ta git-apply
nó để không gian làm việc của mình như thế này:
git apply patch.diff
Nếu nhà phát triển khác đã có các cam kết có sẵn trong kho lưu trữ của mình, anh ấy luôn có thể tự mình thêm vào đó mà không cần hợp nhất như sau:
git apply < git diff fa1afe1 deadbeef
Sau đó, bạn có thể add và commit các thay đổi trong khác biệt the usual way.
Bây giờ, đây là phần thú vị khi bạn phải hợp nhất bản vá lại cho nhánh chính (công khai). Hãy xem xét những cây sửa đổi sau đây C*
là vá áp dụng từ C
trong ngành thạc sĩ:
A---B---C---D master, public/master
\
E---C*---F feature_foo
Bạn có thể sử dụng git-rebase
để cập nhật các chi nhánh chủ đề (trong ví dụ này tên feature_foo
) với nó là đầu thượng nguồn. Điều đó có nghĩa là khi bạn gõ vào như sau:
git rebase master feature_foo
Git sẽ sắp xếp lại các cây sửa đổi như thế này và cũng sẽ áp dụng các bản vá chính nó:
A---B---C---D master, public/master
\
E*---F* feature_foo
sáp nhập vào chi nhánh thượng nguồn bây giờ sẽ là một hợp nhất nhanh về phía trước. Ngoài ra, hãy kiểm tra xem các cam kết mới E*
và F*
có hoạt động tương ứng với E
và F
trước đó không.
Bạn có thể làm điều tương tự với nhánh của nhà phát triển khác bằng các bước tương tự nhưng thay vì thực hiện trên repo công khai, bạn sẽ là fetching sửa đổi từ kho của nhà phát triển. Bằng cách này, bạn sẽ không phải hỏi nhà phát triển khác về một bản vá nếu nó đã có sẵn từ những gì ông đã xuất bản tại repo của mình.
Xin lưu ý rằng không bao giờ rebase một nhánh công cộng vì lệnh sẽ viết lại lịch sử git mà bạn không muốn làm trên các nhánh mà mọi người phụ thuộc và sẽ tạo ra một mớ hỗn độn khi sáp nhập vào kho từ xa. Cũng đừng bao giờ quên integrate often để những người khác trong nhóm của bạn có thể tham gia vào các thay đổi của bạn.
Phát hiện ra sau đó bạn có thể làm điều tương tự với định dạng git-patch để định dạng bản vá và git sáng để áp dụng và cam kết bản vá. Ví dụ: định dạng git-patch -k --stdout R1 ... R2 | git am -3 -k – Spoike