ทั้งสองอย่างgit am
และgit apply
สามารถใช้เพื่อใช้แพทช์ ฉันไม่เห็นความแตกต่าง ตอนนี้ฉันเห็นความแตกต่าง: คอมมิตgit am
โดยอัตโนมัติในขณะที่git apply
แตะไฟล์เท่านั้น แต่ไม่ได้สร้างคอมมิต นั่นคือความแตกต่างเพียงอย่างเดียว?
ทั้งสองอย่างgit am
และgit apply
สามารถใช้เพื่อใช้แพทช์ ฉันไม่เห็นความแตกต่าง ตอนนี้ฉันเห็นความแตกต่าง: คอมมิตgit am
โดยอัตโนมัติในขณะที่git apply
แตะไฟล์เท่านั้น แต่ไม่ได้สร้างคอมมิต นั่นคือความแตกต่างเพียงอย่างเดียว?
คำตอบ:
ทั้งอินพุตและเอาต์พุตต่างกัน:
git apply
ใช้แพตช์ (เช่นเอาต์พุตของgit diff
) และใช้กับไดเร็กทอรีการทำงาน (หรือดัชนีถ้า--index
หรือ--cached
ใช้)git am
นำกล่องจดหมายของการคอมมิตที่จัดรูปแบบเป็นข้อความอีเมล (เช่นผลลัพธ์ของgit format-patch
) และนำไปใช้กับสาขาปัจจุบันgit am
ใช้git apply
เบื้องหลังแต่ทำงานได้มากกว่าก่อน (อ่านMaildir
หรือmbox
และแยกวิเคราะห์ข้อความอีเมล) และหลัง (สร้างคอมมิต)
git apply
ดูเหมือนว่าจะยอมรับgit format-patch
เอาต์พุตด้วย
git apply
จะทำงานสำหรับผลลัพธ์จากgit format-patch
เช่นกัน แต่การเปลี่ยนแปลงจะไม่เป็นขั้นตอนและจะต้องมีการคอมมิต (ดังนั้นการสร้างจุดคอมมิตที่แตกต่างกันในดัชนีที่ใช้กับ) ด้วยการgit am
ที่คุณจะได้รับการดำเนินการข้อมูลกระทำ (พร้อมกับเขียน ฯลฯ ) ในดัชนีมันถูกนำไปใช้ git apply
จากนั้นมีไว้สำหรับการแก้ไข repo ของคุณ (ไม่ดี) git am
สามารถทำการเปลี่ยนแปลงคุณลักษณะที่ถูกต้องและรวมไว้ใน repo ของคุณ (แนวทางที่ต้องการ)
git apply
สำหรับการใช้ diffs ตรง (เช่นจากgit diff
) ในขณะที่git am
เป็นสำหรับการใช้แพทช์และลำดับของแพทช์จากอีเมลทั้ง mbox หรือรูปแบบ Maildir และเป็น "ตรงข้าม" git format-patch
ของ git am
พยายามแยกข้อความคอมมิตและรายละเอียดผู้เขียนจากข้อความอีเมลซึ่งเป็นสาเหตุที่ทำให้คอมมิตได้
เมื่อgit am
คุณใช้โปรแกรมแก้ไขดังนั้นหากคุณใช้git status
คุณจะไม่เห็นการเปลี่ยนแปลงใด ๆ ในท้องถิ่น
git apply
ช่วยให้คุณสามารถทำการเปลี่ยนแปลงในไฟล์ต้นฉบับราวกับว่าคุณกำลังเขียนโค้ดด้วยตัวเองดังนั้นgit status
และgit diff
จะส่งออกการเปลี่ยนแปลงที่เกิดขึ้นในแพตช์ที่คุณใช้จากนั้นคุณสามารถแก้ไข / เพิ่มการเปลี่ยนแปลงเพิ่มเติมและส่งเข้าด้วยกันเป็นแพตช์ใหม่ .
am
อาจคิดว่าเป็นคำย่อของApply Mail
...