หมายเหตุ: คุณควรไม่เปลี่ยนกระทำที่ได้รับการผลักดันที่จะซื้อคืนอื่นในทางใด ๆจนกว่าคุณจะรู้ว่าผลที่ตามมา
git log --oneline -4
D commit_message_for_D
C commit_message_for_C
B commit_message_for_B
A commit_message_for_A
git rebase --interactive
pick D commit_message_for_D
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
ชนิด i
(ใส่ VIM ในโหมดแทรก)
เปลี่ยนรายการให้มีลักษณะดังนี้ (คุณไม่ต้องลบหรือรวมข้อความยืนยัน) อย่าพลาดsquash
! :
pick C commit_message_for_C
pick B commit_message_for_B
pick A commit_message_for_A
squash D
พิมพ์Escแล้วZZ
(บันทึกและออก VIM)
# This is a combination of 2 commits.
# The first commit's message is:
commit_message_for_D
# This is the 2nd commit message:
commit_message_for_A
ชนิด i
เปลี่ยนข้อความเป็นสิ่งที่คุณต้องการให้ข้อความการส่งข้อความใหม่ดูเหมือน ฉันขอแนะนำนี่เป็นคำอธิบายของการเปลี่ยนแปลงที่เกิดขึ้นA
และD
:
new_commit_message_for_A_and_D
พิมพ์Escจากนั้นZZ
git log --oneline -4
E new_commit_message_for_A_and_D
C commit_message_for_C
B commit_message_for_B
git show E
(You should see a diff showing a combination of changes from A and D)
E
คุณได้สร้างตอนนี้ใหม่กระทำ มุ่งมั่นA
และD
ไม่ได้อยู่ในประวัติศาสตร์ของคุณอีกต่อไป แต่จะไม่หายไป คุณยังสามารถกู้คืนได้ในจุดนี้และอีกสักครู่โดยgit rebase --hard D
( git rebase --hard
จะทำลายการเปลี่ยนแปลงในท้องถิ่น! )