วิธีแก้ไขข้อความคอมมิชชันโดยไม่เปลี่ยนข้อความการคอมมิท (การใช้ซ้ำก่อนหน้านี้)


657

มีวิธีในการแก้ไขการกระทำที่ไม่มีvi(หรือของคุณ$EDITOR) โผล่ขึ้นมาพร้อมกับตัวเลือกในการแก้ไขข้อความการส่งข้อความของคุณ แต่เพียงแค่นำข้อความก่อนหน้านี้มาใช้ใหม่หรือไม่


6
ฉันจะลงคำถามของตัวเองหลังจากเรียนรู้วิธีที่ยากลำบากในการแก้ไขความชั่วร้าย
Sridhar Sarnobat

28
ตราบใดที่คุณปฏิบัติตามกฎบางอย่าง (เช่นไม่แก้ไขสิ่งที่ผลักไปแล้ว) ไม่มีเหตุผลว่าทำไมการแก้ไขจะต้องเป็นสิ่งที่ไม่ดี
paullb

3
ไม่ควรใช้การแก้ไขเพื่อการกระทำที่ไม่ต่อเนื่องระหว่างการเปลี่ยนแปลงทางลอจิคัลเดียว เพื่อที่คุณควรกระทำในท้องถิ่นอย่างถูกต้องแล้วสควอชประวัติกระทำเมื่อเสร็จแล้ว (@ Sridhar-Sarnobat)
DBCerigo

3
ฉันเห็นด้วยอย่างสมบูรณ์ @DBCerigo สถานการณ์เดียวที่ฉันพบว่าการแก้ไขที่มีประโยชน์คือเมื่อฉันลืมใส่ไฟล์ในการคอมมิชชันก่อนหน้า (เช่นเพราะมันใหม่
Sridhar Sarnobat

1
การแก้ไขอีกครั้งจะมีประโยชน์แม้ว่าคุณจะตระหนักถึงอันตรายของการเปลี่ยนแปลงประวัติศาสตร์ก็คือถ้าคุณไม่พอใจกับข้อความที่ส่งล่าสุดของคุณและต้องการอ้างสิทธิ์ซ้ำโดยไม่ต้องรีบูต
Sridhar Sarnobat

คำตอบ:


1011

ตั้งแต่รุ่น 1.7.9 git คุณสามารถใช้git commit --amend --no-editเพื่อรับผลลัพธ์ของคุณได้

โปรดทราบว่านี่จะไม่รวมข้อมูลเมตาจากการกระทำอื่น ๆ เช่นการประทับเวลาที่อาจมีหรือไม่มีความสำคัญสำหรับคุณ


42
คุณสามารถทำให้เป็นค่าเริ่มต้นให้กับแฟล็ก --no-edit ได้ง่ายขึ้นโดยการเพิ่มนามแฝง: "modified = commit -a --amend - no-edit"
Jherico

1
@Jherico ฉันขอแนะนำให้ลบ -a กรุณาอย่ากระทำอะตอมของมันวิธีที่ง่ายต่อการตรวจสอบหรือ rebase :)
frouo

120

git commit -C HEAD --amendจะทำในสิ่งที่คุณต้องการ -Cตัวเลือกที่จะใช้เวลาเมตาดาต้าจากที่อื่นกระทำ


15
เพียงเพิ่มคำตอบของแอนดี้ หากนี่คือสิ่งที่คุณทำบ่อยๆคุณสามารถตั้งค่านามแฝงสำหรับใช้งานgit config --global alias.amend 'commit --amend -C HEAD'ได้ จากนั้นคุณสามารถใช้git amendเป็นทางลัด
mikej

9
พวก C'mon อย่าขี้เกียจอัพเกรด git และใช้คำสั่งในตัวที่ Shaggle แนะนำ! บวกหนึ่งตัวเลือกสำหรับ -C
Dimitris Baltas

4
ไม่เพียง แต่การประทับเวลา แต่ยังรวมถึงข้อมูลการประพันธ์!
user1338062

3
@RyanCastner ความคิดเห็นที่คุณอ้างถึงนั้นมาจาก 2013 ด้วยเวอร์ชัน git ที่ฉันใช้อยู่--amendแม้ว่าจะไม่มีตัวเลือกอื่น ๆ ก็ตามก็ยังคงรักษาวันที่ของผู้เขียนไว้ (แต่เปลี่ยนวันที่ส่ง) เช่นนี้ฉันได้ลบความคิดเห็นเก่าของฉัน
Ruben Verborgh

2
จริงๆแล้วคำตอบนี้มีค่าในวิธีที่ต่างกันแม้ว่าจะไม่ใช่คำตอบที่ยอมรับ ซึ่งแตกต่างจากคำตอบอื่น ๆ —amendที่คุณไม่จำเป็นต้องใช้ คุณสามารถสร้างการคอมมิทใหม่ แต่ใช้ข้อความเดียวกับคอมมิชชันก่อนหน้า นั่นอาจจะไม่เป็นประโยชน์ แต่ข้อความคอมมิทเริ่มต้นของฉันเมื่อฉันเพิ่งบันทึกงานของฉันโดยไม่ต้องคิดถึงข้อความคอมมิทที่ดีฉันจะนำข้อความมาใช้ซ้ำ—message=“Work in progress (untested)”
Sridhar Sarnobat

67

อื่น ๆ (โง่) ความเป็นไปได้คือการgit commit --amend <<< :wqถ้าคุณได้มี vi (M) $EDITORเป็น


39
แม้ว่ามันไม่จำเป็นสำหรับกรณีการใช้งานนี้ฉันไม่รู้คุณสามารถไปป์ที่เป็นกลุ่ม ที่เปิดขึ้นเป็นไปได้ที่น่าสนใจบางอย่าง สุดยอดเคล็ดลับ
Sridhar Sarnobat

6
... <<< ZZอาจจะพิมพ์ได้น้อยลง)
Ruslan

6
.. และแม้แต่น้อย - ... <<< :x:)
skwisgaar

3
ฉันไม่คิดว่ามันโง่ เป็นวิธีที่ดีในการปรับปรุงเวิร์กโฟลว์สำหรับคำสั่งใด ๆ ที่เปิดขึ้น vi
B เซเว่น

12
วงเล็บสามมุม นั่นคือใหม่
oligofren

16

หากต้องการขยายคำตอบที่ยอมรับคุณสามารถทำได้:

git commit --amend --no-edit -a

เพื่อเพิ่มไฟล์ที่มีการเปลี่ยนแปลงในปัจจุบัน


11

ใช้คำตอบที่ยอมรับเพื่อสร้างนามแฝง

 oops = "!f(){ \
    git add -A; \
    if [ \"$1\" == '' ]; then \
        git commit --amend --no-edit; \
    else \
        git commit --amend \"$@\"; \
    fi;\
}; f"

จากนั้นคุณสามารถทำได้

git oops

และมันจะเพิ่มทุกอย่างและแก้ไขโดยใช้ข้อความเดียวกัน

หรือ

git oops -m "new message"

เพื่อแก้ไขการแทนที่ข้อความ

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