Làm thế nào để tôi đơn giản tạo ra một bản vá từ cam kết git mới nhất của tôi?


186

Tôi đang tìm kiếm lệnh ma thuật tạo ra một bản vá từ lần cam kết cuối cùng được thực hiện.

Quy trình làm việc của tôi đôi khi trông như thế này

vi some.txt
git add some.txt
git commit -m "some change"

và bây giờ tôi chỉ muốn viết

git create-patch-from-last-commit-to-file SOME-PATCH0001.patch

Nhưng tôi nên đặt cái gì thay vì create-patch-from-last-commit-to-file?



Câu trả lời:


297

Nói chung,

git format-patch -n HEAD^

(kiểm tra trợ giúp cho nhiều tùy chọn), mặc dù đó thực sự là để gửi thư cho họ. Đối với một cam kết chỉ

git show HEAD > some-patch0001.patch

sẽ cung cấp cho bạn một bản vá có thể sử dụng.


18
hãy cẩn thận với "git show HEAD> some-patch0001.patch", nếu nó được gọi trong thiết bị đầu cuối màu, nó cũng chuyển các chuỗi thoát màu thành tập tin.
hrach

12
Bạn cũng có thể sử dụng git diff > change.patch. Bạn cũng có thể bao gồm một phạm vi sửa đổi và nó cho phép bạn tạo các bản vá cho các thay đổi không được cam kết. Tuy nhiên, sự khác biệt lớn là nó sẽ không bao gồm sự khác biệt trong các tệp nhị phân . Xem câu trả lời cho sự khác biệt giữa 'git format-patch' và 'git diff' là gì? để biết thêm chi tiết.
Rangi Keen

4
@hrach không có trên Linux thì không
Robin Green

4
Không, bởi vì đó không phải là những gì dòng đầu tiên nói. Hoặc là git format-patch -1hoặc git format-patch -n HEAD^nên làm việc.
Vô dụng

4
Cảm ơn, tôi đã không hiểu rằng đó đúng là chữ cái 'n', tôi nghĩ rằng đó là một trình giữ chỗ (bản vá định dạng có cả hai tùy chọn '-n' và '- <n>').
Étienne

60

Lấy từ @Usless câu trả lời, bạn cũng có thể sử dụng biểu mẫu chung không có tham số cho lần xác nhận cuối cùng và đặt nó vào một tệp có:

git format-patch HEAD^ --stdout > patchfile.patch

Hoặc, sạch hơn cho người dùng windows khi cần phải thoát ra bằng cách nhân đôi chúng:

git format-patch HEAD~1 --stdout > patchfile.patch

2
Làm việc cho tôi - cảm ơn. Nếu bạn tình cờ sử dụng Windows và Git, bạn phải thoát khỏi củ cà rốt (tôi biết là ghê tởm): "git format-patch HEAD ^^ --stdout> patchfile.patch"
Steve Midgley

3
Để tránh vấn đề Windows phải thoát khỏi dấu mũ đó (làm cho nó trông giống như một lệnh git hợp lệ khác), bạn có thể sử dụng thay thế git format-patch HEAD~1. Tôi nghĩ rằng kết thúc là ít gây nhầm lẫn trên Windows.
Michael Burr

30

một cách khác, nếu có id xác nhận của cam kết cụ thể đó, bạn có thể sử dụng,

git format-patch -1 {commit-id}

9

Bạn cần -ptùy chọn để đăng nhập git:

git log -1 -p --pretty='%b'

Sử dụng cái này nếu bạn không quan tâm đến email từ / ngày / dòng chủ đề ở đầu tệp.
Ryan H.

5
git format-patch -1

Có công việc cho tôi.

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.