ฉันจะสร้างแพทช์จากคอมไพล์ล่าสุดของฉันได้อย่างไร?


186

ฉันกำลังมองหาคำสั่งเวทมนต์ในการสร้างแพทช์จากการคอมมิทล่าสุด

บางครั้งเวิร์กโฟลว์ของฉันมีลักษณะเช่นนี้

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

และตอนนี้ฉันแค่อยากจะเขียน

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

แต่สิ่งที่ฉันควรใส่มีแทนcreate-patch-from-last-commit-to-file?



2
แหล่งข้อมูลที่ดี: ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git
Adam Ocsvari

คำตอบ:


297

โดยทั่วไปแล้ว

git format-patch -n HEAD^

(ตรวจสอบความช่วยเหลือสำหรับตัวเลือกมากมาย) แม้ว่าจะเป็นจดหมายจริง ๆ ก็ตาม สำหรับการกระทำเพียงอย่างเดียว

git show HEAD > some-patch0001.patch

จะให้แพทช์ที่ใช้ได้


18
ระวังด้วย "git show HEAD> some-patch0001.patch" ถ้ามันถูกเรียกใช้ในเทอร์มินัลสีมันก็จะแสดงลำดับการหลีกเลี่ยงสีในไฟล์
21921 hrach

12
git diff > change.patchนอกจากนี้คุณยังสามารถใช้ คุณสามารถรวมช่วงการแก้ไขได้เช่นกันและช่วยให้คุณสามารถสร้างแพตช์สำหรับการเปลี่ยนแปลงที่ไม่มีข้อผูกมัด ความแตกต่างใหญ่ แต่เป็นว่ามันจะไม่รวมถึงความแตกต่างในไฟล์ไบนารี ดูคำตอบของ 'git format-patch' และ 'git diff' ต่างกันอย่างไร? สำหรับรายละเอียดเพิ่มเติม
Rangi Keen

4
@hrach ไม่ได้อยู่ใน Linux มันไม่ได้
Robin Green

4
ไม่เพราะนั่นไม่ใช่สิ่งที่บรรทัดแรกพูด อย่างใดอย่างหนึ่งgit format-patch -1หรือgit format-patch -n HEAD^ควรทำงาน
ไร้ประโยชน์

4
ขอบคุณฉันไม่เข้าใจว่ามันเป็นตัวอักษร 'n' ฉันคิดว่ามันเป็นตัวยึดตำแหน่ง (format-patch มีตัวเลือกทั้ง '-n' และ '- <n>')
Étienne

60

รับจาก @ คำตอบที่ไม่มีคำตอบคุณสามารถใช้แบบฟอร์มทั่วไปโดยไม่มีพารามิเตอร์สำหรับการคอมมิทล่าสุดและใส่ไว้ในไฟล์ด้วย:

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

หรือทำความสะอาดสำหรับผู้ใช้ windows เมื่อต้องระวัง carets โดยการเสแสร้งพวกเขา:

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

2
ทำงานให้ฉัน - ขอบคุณ หากคุณใช้ Windows และ Git คุณต้องหลบหนีแครอท (ฉันรู้ว่าชั่วร้าย): "git format-patch HEAD ^^ --stdout> patchfile.patch"
Steve Midgley

3
เพื่อหลีกเลี่ยงปัญหาของ Windows ของการมีที่จะหลบหนีเครื่องหมายว่า (ซึ่งทำให้มีลักษณะเหมือนคำสั่งคอมไพล์ที่ถูกต้องแตกต่างกัน) git format-patch HEAD~1คุณสามารถใช้ทางเลือกของ ฉันคิดว่ามันทำให้ Windows สับสนน้อยลง
Michael Burr

30

อีกวิธีหนึ่งถ้ามีรหัสการกระทำของการกระทำนั้นคุณสามารถใช้

git format-patch -1 {commit-id}

9

คุณต้องการ-pตัวเลือกในการบันทึก git:

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

ใช้ตัวเลือกนี้หากคุณไม่สนใจอีเมลจาก / วันที่ / หัวเรื่องที่ด้านบนของไฟล์
Ryan H.

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.