หมายเหตุ: คำตอบนี้จะเปลี่ยน SHA1s ดังนั้นโปรดระมัดระวังในการใช้กับสาขาที่ถูกผลักไปแล้ว หากคุณต้องการแก้ไขการสะกดชื่อหรืออัปเดตอีเมลเก่าเท่านั้น git ช่วยให้คุณทำสิ่งนี้ได้โดยไม่ต้องเขียนประวัติการใช้งาน.mailmap
ใหม่ ดูคำตอบอื่น ๆ ของฉัน
ใช้ Interactive Rebase
คุณสามารถทำได้
git rebase -i -p <some HEAD before all of your bad commits>
จากนั้นทำเครื่องหมายการกระทำที่ไม่ดีทั้งหมดของคุณเป็น "แก้ไข" ในไฟล์ rebase หากคุณต้องการเปลี่ยนการส่งคำสั่งแรกคุณต้องเพิ่มมันเป็นบรรทัดแรกในไฟล์ rebase ด้วยตนเอง (ตามรูปแบบของบรรทัดอื่น ๆ ) จากนั้นเมื่อคอมไพล์ขอให้คุณแก้ไขการกระทำแต่ละทำ
git commit --amend --author "New Author Name <email@address.com>"
แก้ไขหรือเพียงปิดตัวแก้ไขที่เปิดขึ้นมาจากนั้นทำ
git rebase --continue
เพื่อดำเนินการต่อการลดลง
คุณสามารถข้ามการเปิดตัวแก้ไขพร้อมกันได้ที่นี่โดยการต่อท้าย--no-edit
คำสั่งจะเป็น:
git commit --amend --author "New Author Name <email@address.com>" --no-edit && \
git rebase --continue
กระทำเดียว
ตามที่ผู้คอมเม้นต์บางคนระบุไว้หากคุณต้องการเปลี่ยนการคอมมิทล่าสุดคำสั่ง rebase ก็ไม่จำเป็น แค่ทำ
git commit --amend --author "New Author Name <email@address.com>"
นี้จะเปลี่ยนผู้เขียนชื่อที่ระบุไว้ แต่ committer จะถูกตั้งค่าให้กับผู้ใช้กำหนดค่าของคุณและgit config user.name
git config user.email
หากคุณต้องการตั้งค่าผู้ส่งเป็นสิ่งที่คุณระบุสิ่งนี้จะตั้งทั้งผู้แต่งและผู้เดินทาง:
git -c user.name="New Author Name" -c user.email=email@address.com commit --amend --reset-author
หมายเหตุเกี่ยวกับการรวมการกระทำ
การตอบสนองดั้งเดิมของฉันมีข้อบกพร่องเล็กน้อย หากมีการรวมใด ๆ ที่กระทำระหว่างปัจจุบันHEAD
และของคุณ<some HEAD before all your bad commits>
แล้วก็git rebase
จะแบนพวกเขา (และโดยวิธีถ้าคุณใช้คำขอดึง GitHub จะมีการรวมการกระทำตันในประวัติศาสตร์ของคุณ) สิ่งนี้มักจะนำไปสู่ประวัติศาสตร์ที่แตกต่างกันมาก (เนื่องจากการเปลี่ยนแปลงที่ซ้ำกันอาจเป็น "rebased out") และในกรณีที่เลวร้ายที่สุดมันอาจนำไปสู่การgit rebase
ขอให้คุณแก้ไขข้อขัดแย้งการผสานที่ยากลำบาก การแก้ปัญหาคือการใช้การ-p
ตั้งค่าสถานะgit rebase
ซึ่งจะรักษาโครงสร้างการผสานของประวัติของคุณ manpage สำหรับgit rebase
เตือนว่าการใช้-p
และ-i
สามารถนำไปสู่ปัญหา แต่ในBUGS
ส่วนจะกล่าวว่า "การแก้ไขการกระทำและการเขียนข้อความยืนยันการกระทำของพวกเขาควรจะทำงานได้ดี"
ฉันได้เพิ่ม-p
คำสั่งข้างต้น สำหรับกรณีที่คุณเพิ่งเปลี่ยนการกระทำล่าสุดนี่ไม่ใช่ปัญหา