วิธีการเปลี่ยนคอมมิทหลายคอมไพล์เพื่อเปลี่ยนผู้แต่ง

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

ฉันดูการ git reset และ git commit -C <id> --reset-author แต่ฉันไม่คิดว่าฉันกำลังถูก

88
13 февр. pauldoo ตั้ง 13 ก.พ. 2011-02-13 01:48 '11 เวลา 1:48 2011-02-13 01:48
@ 5 คำตอบ

Rebase / modified ดูเหมือนว่าไม่มีประสิทธิภาพเมื่อคุณมีอำนาจของสาขาตัวกรอง:

 git filter-branch --env-filter 'if [ "$GIT_AUTHOR_EMAIL" = "incorrect@email" ]; then GIT_AUTHOR_EMAIL=correct@email; GIT_AUTHOR_NAME="Correct Name"; GIT_COMMITTER_EMAIL=$GIT_AUTHOR_EMAIL; GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"; fi' -- --all 

(แยกสตริงเพื่อความชัดเจน แต่ไม่จำเป็น)

อย่าลืมตรวจสอบผลลัพธ์เมื่อคุณทำเพื่อให้แน่ใจว่าคุณไม่ได้เปลี่ยนแปลงอะไรที่คุณไม่ต้องการ!

104
13 февр. Jefromi ได้รับคำตอบ เมื่อวันที่ 13 กุมภาพันธ์ 2011-02-13 06:33 '11 เวลา 6:33 น. 2011-02-13 06:33

วิธีการโต้ตอบเพื่อเปลี่ยนเส้นทางค่อนข้างดีเมื่อใช้ร่วมกับ exec คุณสามารถเรียกใช้คำสั่งเชลล์กับการกระทำที่เฉพาะเจาะจงหรือการกระทำทั้งหมดใน rebase

ตั้งค่าผู้เขียน git ก่อน

 git config --global user.name "John Doe" git config --global user.email johndoe@example.com 

จากนั้นจนกระทั่งรีเซ็ตผู้เขียนจะแก้ไขทั้งหมดหลังจาก SHA ที่กำหนด

border=0
 git rebase -i YOUR_SHA -x "git commit --amend --reset-author -CHEAD" 

สิ่งนี้จะนำเสนอโปรแกรมแก้ไขของคุณเพื่อยืนยันการเปลี่ยนแปลง สิ่งที่คุณต้องทำคือบันทึกและออกและมันจะผ่านแต่ละการกระทำและเรียกใช้คำสั่งที่ระบุในแฟล็ก -x

ในความคิดเห็น @Dave ด้านล่างคุณสามารถเปลี่ยนผู้เขียนได้ในขณะที่ยังคงบันทึกเวลาเดิมด้วย:

 git rebase -i YOUR_SHA -x "git commit --amend --author 'New Name <new_address@example.com>' -CHEAD" 
68
12 сент. ตอบกลับให้ Alex เมื่อวันที่ 12 sep 2014-09-12 22:05 '14 เวลา 22:05 น. 2014-09-12 22:05

หากต้องการเปลี่ยนผู้เขียนเฉพาะสำหรับการส่งครั้งล่าสุด:

 git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit 

สมมติว่าคุณต้องการเปลี่ยนผู้เขียนเฉพาะสำหรับการยอมรับ N ครั้งล่าสุด:

 git rebase -i HEAD~4 -x "git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit" 

หมายเหตุ

  • --no-edit ธงเพื่อให้แน่ใจว่า git commit --amend --no-edit ไม่ขอการยืนยันเพิ่มเติม
  • เมื่อคุณใช้ git rebase -i คุณสามารถเลือกกระทำด้วยตนเองซึ่งคุณสามารถเปลี่ยนผู้เขียนได้

ไฟล์ที่คุณกำลังแก้ไขจะมีลักษณะดังนี้:

 pick 897fe9e simplify code a little pick abb60f9 add new feature exec git commit --amend --author 'Author Name <author.name@mail.com>' --no-edit pick dc18f70 bugfix 
34
28 июля '15 в 10:19 2015-07-28 10:19 Chris Maes ได้รับคำตอบ เมื่อวันที่ 28 กรกฎาคม 2558 เวลา 10:19 2558-07-28 10:19

ฉันเชื่อว่าคุณกำลังมองหา git rebase --interactive

ช่วยให้คุณสามารถรีเซ็ตการกระทำที่เฉพาะเจาะจงและจากนั้นไปเปลี่ยนประวัติของการเพิ่มหรือการจัดกลุ่มกระทำ

ที่นี่คุณมีคำอธิบาย http://blog.madism.org/index.php/2007/09/09/138-git-awsome-ness-git-rebase-interactive

3
13 февр. ตอบโดย Fernando Diaz Garrido เมื่อวันที่ 13 กุมภาพันธ์ 2011-02-13 02:16 '11 เวลา 2:16 2011-02-13 02:16

หากคุณรู้สึกไม่ปลอดภัยเกี่ยวกับการปฏิเสธและการแก้ไขคุณสามารถทำได้ ในเวลาเดียวกันคุณจะตั้งค่าการกำหนดค่าส่วนกลางซึ่งคุณอาจต้องการทำต่อไป

git reset HEAD~ (เลิกทำการกระทำล่าสุด)

git config --global user.name "Your Name"

git config --global user.email you@example.com

git commit -m "message"

0
13 окт. ตอบกลับมารับ tymac 13 ต.ค. 2017-10-13 06:21 '17 เวลา 6:21 น. 2017-10-13 06:21

คำถามอื่น ๆ เกี่ยวกับแท็ก หรือ ถามคำถาม