Làm thế nào để bạn lấy một tệp git diff và áp dụng nó cho một nhánh cục bộ là bản sao của cùng một kho lưu trữ?


491

Tôi có một tệp .diff được tạo bởi đồng nghiệp và muốn áp dụng các thay đổi được liệt kê trong tệp diff đó cho nhánh cục bộ của tôi trong cùng một kho lưu trữ. Tôi không có quyền truy cập vào máy tính hoặc chi nhánh của công nhân đó đã được sử dụng để tạo tệp khác này.

Rõ ràng là tôi có thể đi từng dòng một và gõ lại mọi thứ, nhưng tôi không muốn hệ thống bị lỗi của con người. Cách dễ nhất để làm điều này là gì?

Câu trả lời:


746

Sao chép tệp diff vào thư mục gốc của kho lưu trữ của bạn và sau đó thực hiện:

git apply yourcoworkers.diff

Thông tin thêm về applylệnh có sẵn trên trang man của nó .

Nhân tiện: Một cách tốt hơn để trao đổi toàn bộ các cam kết bằng tệp là sự kết hợp các lệnh git format-patchtrên người gửi và sau đó git amtrên người nhận, bởi vì nó cũng chuyển thông tin về quyền tác giả và thông điệp cam kết.

Nếu ứng dụng vá lỗi thất bại và nếu các cam kết khác biệt được tạo ra thực sự nằm trong repo của bạn, bạn có thể sử dụng -3tùy chọn applycố gắng hợp nhất trong các thay đổi.

Nó cũng hoạt động với ống Unix như sau:

git diff d892531 815a3b5 | git apply

3
Cảm ơn đã trả lời, nhưng điều đó gây ra lỗi khi nói, bản vá không thành công: filename.php: 202 error: filename.php: patch không áp dụng. Tin tốt là nó không phải là tên tệp đầu tiên trong tệp, vì vậy ít nhất nó đã có thể xử lý một số tệp. Có suy nghĩ gì không?
Mike_K

4
Bạn dường như cũng có những thay đổi đối với tập tin đó khiến bản vá không hoạt động. Để giải quyết vấn đề này, bạn có thể cam kết các thay đổi của mình, tạo một chi nhánh mới, đặt lại thành cam kết nơi bạn và đồng nghiệp của bạn chuyển hướng, áp dụng bản vá, cam kết và sau đó hợp nhất hai chi nhánh.
Phi

3
@orlybg Khi bạn chưa cam kết, hãy git reset --hardtrả lại cây làm việc của bạn cho lần xác nhận cuối cùng. Khi bạn đã cam kết, hãy thêm bản sửa đổi mà bạn muốn quay lại.
Philipp

5
@orlybg Xin lỗi, nhưng sau đó bạn bị lừa. Git chỉ tạo một điểm kiểm tra mà bạn có thể quay lại khi bạn thực hiện cam kết. Đó là lý do tại sao nhiều hướng dẫn git khuyên bạn nên cam kết sớm và thường xuyên .
Philipp

4
@orlybg ít nhất, hãy chạy git stashtrước khi bạn thực hiện một số hành động mà bạn có thể muốn đảo ngược sau đó. Sau đó, bằng cách nào đó, bạn có thể mang lại stash của mình và cam kết tại một số điểm sau đó.
maurice
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.