2012-02-22 36 views
158

Tôi đang tìm lệnh ma thuật tạo bản vá từ lần commit cuối cùng được thực hiện.Làm cách nào để tạo một bản vá từ cam kết git mới nhất của tôi?

công 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 những gì tôi nên đặt ở đó thay vì create-patch-from-last-commit-to-file?

+0

bản sao có thể có của [Tạo bản vá git cho một cam kết cụ thể] (http://stackoverflow.com/questions/6658313/generate-a-git-patch-for-a-specific-commit) – manojlds

+1

Một nguồn tốt: https://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/ –

Trả lời

258

Nói chung,

git format-patch -n HEAD^ 

(kiểm tra giúp đỡ cho nhiều lựa chọn), mặc dù nó thực sự cho gửi thư cho họ. Đối với một cam kết duy nhấ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.

+0

cái này ngắn hơn, điều này tốt. git show HEAD> MỘT SỐ-PATCH0001.patch sẽ giải quyết vấn đề của tôi, cảm ơn bạn! – claj

+14

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 có màu, nó cũng có thể xóa các chuỗi thoát màu vào trong tệp. – hrach

+11

Bạn cũng có thể sử dụng 'git diff> change.patch'. Bạn cũng có thể bao gồm phạm vi sửa đổi và nó cho phép bạn tạo bản vá cho những thay đổi không được cam kết. Tuy nhiên, sự khác biệt lớn là _it sẽ không bao gồm sự khác biệt trong 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'?] (Http://stackoverflow.com/a/4624292/2506021) để biết thêm chi tiết. –

7

Bạn cần lựa chọn -p để git log:

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

Sử dụng tùy chọn này nếu bạn không quan tâm đến email từ/ngày/dòng chủ đề ở đầu tệp. –

47

Lấy từ @Useless câu trả lời, bạn cũng có thể sử dụng mẫu chung không có tham số cho các cam kết cuối cùng và đặt nó vào một tập tin với:

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

Hoặc là sạch hơn cho các cửa sổ người dùng khi dấu mũ phải được thoát 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à rốt (tôi biết ghê tởm): "git format-patch HEAD ^^ --stdout> patchfile.patch" –

+0

Để tránh vấn đề Windows phải thoát khỏi dấu nháy đó (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 quả là ít gây nhầm lẫn trên Windows. –

23

một cách khác, nếu có cam kết id đó đặc biệt cam kết, bạn có thể sử dụng,

git format-patch -1 {commit-id} 
2
git format-patch -1 

Liệu các công việc cho tôi.

Các vấn đề liên quan