ทั้งสองอย่าง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...