มีวิธีแก้ไขข้อความส่งหลังจากกระทำและส่งไปยัง GitHub หรือไม่ ฉันเห็นว่ามี 'เพิ่มบันทึกย่อ' รวมถึงความคิดเห็นแบบอินไลน์ แต่ไม่มีการแก้ไขข้อความกระทำจริง นอกจากนี้ยังมี 'แก้ไขการกระทำ' ในส่วนขยาย git แต่ไม่ได้แก้ไขข้อความที่มีอยู่
มีวิธีแก้ไขข้อความส่งหลังจากกระทำและส่งไปยัง GitHub หรือไม่ ฉันเห็นว่ามี 'เพิ่มบันทึกย่อ' รวมถึงความคิดเห็นแบบอินไลน์ แต่ไม่มีการแก้ไขข้อความกระทำจริง นอกจากนี้ยังมี 'แก้ไขการกระทำ' ในส่วนขยาย git แต่ไม่ได้แก้ไขข้อความที่มีอยู่
คำตอบ:
git rebase -i <commit hash you want to change>^
สิ่งนี้จะเปิดตัวแก้ไขเริ่มต้นของคุณ (โดยปกติคือvi ) พร้อมรายการการกระทำและการกระทำสำหรับแต่ละรายการ pickโดยค่าเริ่มต้นการกระทำที่เป็น
สำหรับท่านใดกระทำคุณต้องการที่จะเปลี่ยนข้อความเปลี่ยนไปpickreword
บันทึกและเลิก (ใน vi: :wq)
สำหรับการกระทำแต่ละครั้งคุณจะได้รับโปรแกรมแก้ไขเพื่อแก้ไขข้อความการส่งข้อความ เปลี่ยนตามที่เห็นสมควรให้บันทึกและออก
เมื่อคุณแก้ไขข้อความกระทำทั้งหมดเสร็จแล้วคุณจะกลับสู่พรอมต์คำสั่งและมีแผนผังใหม่พร้อมข้อความที่อัปเดต
ขณะนี้คุณสามารถอัปโหลดไปยัง GitHub git push origin --forceโดยใช้
หากคุณเพียงแค่ต้องแก้ไขกระทำของคุณที่ผ่านมาคุณสามารถเปลี่ยนขั้นตอนที่ 1-4 git commit --amendกับ
^อยู่ที่นั่น - ฉันแนะนำให้ทำการรีบูทบนพาเรนต์ของการคอมมิทที่คุณต้องการเปลี่ยน
^^เพื่อจบคำสั่งด้วยตัวอักษร^ เช่น: git rebase -i 2c747b32^^
ใน Intellij Idea คุณสามารถทำได้ง่าย
git push origin --forceตามที่แนะนำในคำตอบของ @ Mureinik
ถ้า git-graph ของคุณดูเหมือน ...
O target-commit that you want to change its message [df9c192]
|
O parent-commit [b7ec061]
|
O
( df9c192และb7ec061เป็นแฮชการกระทำของการกำหนดเป้าหมายและพาเรนต์การกระทำแยกต่างหาก)
คุณสามารถพิมพ์คำแนะนำต่อไปนี้ ...
git reset --soft b7ec061
git commit -m "your_new_description"
git push -f
git reset --soft b7ec061 จะเก็บการเปลี่ยนแปลงของไฟล์และรีเซ็ตเป็น parent-commit (เช่น b7ec061)git commit -m "..." จะสร้างการมอบหมายใหม่ในเครื่องgit push -f จะผลักดันคอมมิชชันใหม่ของคุณไปยังเซิร์ฟเวอร์และแทนที่อันเก่า (เช่น df9c192)อีกตัวเลือกหนึ่งคือการสร้าง "errata commit" เพิ่มเติม (และพุช) ซึ่งอ้างอิงถึงวัตถุกระทำที่มีข้อผิดพลาด - errata กระทำใหม่ยังให้การแก้ไข คหบดีกระทำเป็นกระทำโดยไม่มีการเปลี่ยนแปลงรหัสสำคัญ แต่ที่สำคัญการกระทำข้อความ - ตัวอย่างเช่นเพิ่มตัวอักษรพื้นที่หนึ่งไปยังแฟ้ม readme --allow-emptyของคุณและกระทำการเปลี่ยนแปลงว่ามีการกระทำที่สำคัญข้อความหรือใช้ตัวเลือกคอมไพล์ แน่นอนว่าง่ายกว่าและปลอดภัยกว่าการรีบูตมันไม่ได้แก้ไขประวัติจริงและทำให้ต้นไม้สาขาสะอาด (ใช้amendเป็นตัวเลือกที่ดีถ้าคุณแก้ไขการคอมมิชชันล่าสุด แต่การคอมมิชชันแบบ errata อาจเป็นทางเลือกที่ดีสำหรับการคอมมิทรุ่นเก่า) ประเภทของสิ่งนี้เกิดขึ้นน้อยมากที่การบันทึกความผิดพลาดนั้นดีพอ ในอนาคตหากคุณต้องการค้นหาผ่านบันทึกการใช้คอมไพล์สำหรับคำหลักคุณลักษณะการกระทำ (ผิดพลาด) ดั้งเดิมอาจไม่ปรากฏเนื่องจากมีการใช้คำหลักผิดในการส่งต้นฉบับ (พิมพ์ต้นฉบับ) - อย่างไรก็ตามคำหลักจะปรากฏขึ้น ใน errata commit ซึ่งจะนำคุณไปยังการคอมมิทดั้งเดิมที่มีการพิมพ์ผิด นี่คือตัวอย่าง:
บันทึก $ git
กระทำ 0c28141c68adae276840f17ccd4766542c33cf1d
ผู้เขียน: ครั้งแรกที่ผ่านมา
วันที่: พุธ 8 สิงหาคม 15:55:52 2018 -0600
ข้อผิดพลาด Errata:
การกระทำนี้ไม่มีการเปลี่ยนแปลงรหัสที่สำคัญ
การกระทำนี้ให้ไว้เพื่อบันทึกการแก้ไขข้อความการส่งก่อนหน้าเท่านั้น
ที่เกี่ยวข้องกับการกระทำวัตถุ e083a7abd8deb5776cb304fa13731a4182a24be1
ข้อความคอมมิชชันเดิมไม่ถูกต้อง:
เปลี่ยนสีพื้นหลังเป็นสีแดง
การแก้ไข (* เน้นการเปลี่ยนแปลง *):
เปลี่ยนสีพื้นหลังเป็น * blue *
ส่งมอบ 032d0ff0601bff79bdef3c6f0a02ebfa061c4ad4
ผู้เขียน: ครั้งแรกที่ผ่านมา
วันที่: พุธ 8 สิงหาคม 15:43:16 2018 -0600
ข้อความการส่งระหว่างกาลบางข้อความ
ส่ง e083a7abd8deb5776cb304fa13731a4182a24be1
ผู้เขียน: ครั้งแรกที่ผ่านมา
วันที่: พุธ 8 สิงหาคม 13:31:32 2018 -0600
เปลี่ยนสีพื้นหลังเป็นสีแดง
คำตอบของ @Mureinikนั้นเป็นสิ่งที่ดี แต่ไม่สามารถเข้าใจได้โดยมือใหม่
วิธีแรก:
git commit --amendคุณจะเห็น:<your existing commit mesage foo bar>
# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# On branch is up to date with 'origin/master'.
#
# changes to be committed:
# modified: foo.py
#
pickนี่เป็นหน้าแก้ไขแล้วและคุณสามารถแก้ไขข้อความด้านบนโดยตรงและบันทึก & ออกเช่น:<your new correction commit message>
# Please enter the commit message for your changes. Lines starting
....
git push -u origin master --force สำคัญนี่คือ<how you push normally> --force--forceวิธีที่สอง:
คุณสามารถเห็นคอมมิชชันการแฮชโดยgit logหรือแยกจาก url ที่เก็บตัวอย่างในกรณีของฉันคือ881129d771219cfa29e6f6c2205851a2994a8835
จากนั้นคุณสามารถทำgit rebase --interactive 881129d771219cfa29e6f6c2205851a2994a8835หรือgit rebase -i HEAD^(ถ้าล่าสุด)
คุณจะเห็น:
pick <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
# r, reword = use commit, but edit the commit message
# e, edit = use commit, but stop for amending
# s, squash = use commit, but meld into previous commit
# f, fixup = like "squash", but discard this commit's log message
# x, exec = run command (the rest of the line) using shell
# d, drop = remove commit
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out
noopแล้วคุณอาจพิมพ์ผิดเช่นถ้าคุณgit rebase -i 881129d771219cfa29e6f6c2205851a2994a88ขาดสิ่งใด^ในตอนท้ายคุณควรออกจากตัวแก้ไขโดยไม่บันทึกและหาเหตุผล:noop
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
...
noopปัญหาก็เพียงเปลี่ยนคำpickเป็นrewordอื่น ๆ ก็ยังคงอยู่ (คุณไม่แก้ไขข้อความกระทำ ณ จุดนี้) เช่น:reword <commit hash> <your current commit message>
# Rebase 8db7e8b..fa20af3 onto 8db7e8b
#
# Commands:
# p, pick = use commit
...
<your existing commit mesage foo bar>
# Please enter the commit message fir your changes. Lines starting
# with # will be ignored, and an empty message aborts the commit.
#
# Date: Sat Aug 24 17:56:16 2019 +0800
#
# interactive rebase in progress; onto b057371
# Last command done (1 command done):
# reword d996ffb <existing commit message foo bar>
# No commands remaining.
# You are currently editing a commit while rebasing branch 'master' on 'b057371'.
#
# changes to be committed:
# modified: foo.py
#
<your new correction commit message>
# Please enter the commit message for your changes. Lines starting
....
git push -u origin master --force สำคัญนี่คือ<how you push normally> --force--force