ความแตกต่างระหว่าง git am และ git apply คืออะไร?


143

ทั้งสองอย่างgit amและgit applyสามารถใช้เพื่อใช้แพทช์ ฉันไม่เห็นความแตกต่าง ตอนนี้ฉันเห็นความแตกต่าง: คอมมิตgit amโดยอัตโนมัติในขณะที่git applyแตะไฟล์เท่านั้น แต่ไม่ได้สร้างคอมมิต นั่นคือความแตกต่างเพียงอย่างเดียว?


13
amอาจคิดว่าเป็นคำย่อของApply Mail...
Philip Oakley

คำตอบ:


156

ทั้งอินพุตและเอาต์พุตต่างกัน:

  • git applyใช้แพตช์ (เช่นเอาต์พุตของgit diff) และใช้กับไดเร็กทอรีการทำงาน (หรือดัชนีถ้า--indexหรือ--cachedใช้)
  • git amนำกล่องจดหมายของการคอมมิตที่จัดรูปแบบเป็นข้อความอีเมล (เช่นผลลัพธ์ของgit format-patch) และนำไปใช้กับสาขาปัจจุบัน

git amใช้git applyเบื้องหลังแต่ทำงานได้มากกว่าก่อน (อ่านMaildirหรือmboxและแยกวิเคราะห์ข้อความอีเมล) และหลัง (สร้างคอมมิต)


6
หมายเหตุ: git applyดูเหมือนว่าจะยอมรับgit format-patchเอาต์พุตด้วย
Ciro Santilli 郝海东冠状病六四事件法轮功

9
git applyจะทำงานสำหรับผลลัพธ์จากgit format-patchเช่นกัน แต่การเปลี่ยนแปลงจะไม่เป็นขั้นตอนและจะต้องมีการคอมมิต (ดังนั้นการสร้างจุดคอมมิตที่แตกต่างกันในดัชนีที่ใช้กับ) ด้วยการgit amที่คุณจะได้รับการดำเนินการข้อมูลกระทำ (พร้อมกับเขียน ฯลฯ ) ในดัชนีมันถูกนำไปใช้ git applyจากนั้นมีไว้สำหรับการแก้ไข repo ของคุณ (ไม่ดี) git amสามารถทำการเปลี่ยนแปลงคุณลักษณะที่ถูกต้องและรวมไว้ใน repo ของคุณ (แนวทางที่ต้องการ)
Prasoon Joshi

18

git applyสำหรับการใช้ diffs ตรง (เช่นจากgit diff) ในขณะที่git amเป็นสำหรับการใช้แพทช์และลำดับของแพทช์จากอีเมลทั้ง mbox หรือรูปแบบ Maildir และเป็น "ตรงข้าม" git format-patchของ git amพยายามแยกข้อความคอมมิตและรายละเอียดผู้เขียนจากข้อความอีเมลซึ่งเป็นสาเหตุที่ทำให้คอมมิตได้


9

เมื่อgit amคุณใช้โปรแกรมแก้ไขดังนั้นหากคุณใช้git statusคุณจะไม่เห็นการเปลี่ยนแปลงใด ๆ ในท้องถิ่น

git applyช่วยให้คุณสามารถทำการเปลี่ยนแปลงในไฟล์ต้นฉบับราวกับว่าคุณกำลังเขียนโค้ดด้วยตัวเองดังนั้นgit statusและgit diffจะส่งออกการเปลี่ยนแปลงที่เกิดขึ้นในแพตช์ที่คุณใช้จากนั้นคุณสามารถแก้ไข / เพิ่มการเปลี่ยนแปลงเพิ่มเติมและส่งเข้าด้วยกันเป็นแพตช์ใหม่ .

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