มีวิธีการจัดการสองวิธีนี้ ซึ่งง่ายกว่านั้นขึ้นอยู่กับสถานการณ์ของคุณ
ตั้งค่าใหม่
หากความมุ่งมั่นที่คุณต้องการกำจัดเป็นความมุ่งมั่นครั้งสุดท้ายและคุณยังไม่ได้ทำงานเพิ่มเติมใด ๆ ที่คุณสามารถทำได้ git-reset
git reset HEAD^
นำสาขาของคุณกลับไปสู่ความมุ่งมั่นต่อหน้าหัวหน้าปัจจุบันของคุณ อย่างไรก็ตามมันไม่ได้เปลี่ยนไฟล์ในแผนผังการทำงานของคุณ ดังนั้นการเปลี่ยนแปลงที่เกิดขึ้นในการกระทำที่ปรากฏขึ้นมีการแก้ไข - มันเหมือนคำสั่ง 'ผิดปกติ' อันที่จริงฉันมีนามแฝงที่จะทำเช่นนั้น
git config --global alias.uncommit 'reset HEAD^'
จากนั้นคุณสามารถใช้git uncommit
ในอนาคตเพื่อสำรองข้อมูลการกระทำ
ฉับ
การบีบคอมมิชชันหมายถึงการรวมสองคอมมิชชันเข้าด้วยกันเป็นหนึ่งเดียว ฉันทำสิ่งนี้บ่อยๆ ในกรณีของคุณคุณมีคุณสมบัติที่ทำเสร็จแล้วครึ่งหนึ่งจากนั้นคุณจะปิดมันและส่งอีกครั้งด้วยข้อความยืนยันที่เหมาะสมและถาวร
git rebase -i <ref>
ฉันพูดไปแล้วเพราะฉันต้องการทำให้ชัดเจนว่านี่อาจเป็นข้อผูกมัดใด ๆ เรียกใช้git log
และพบการกระทำที่คุณต้องการที่จะกำจัดให้คัดลอก SHA1 <ref>
และใช้มันในสถานที่ของ Git จะนำคุณเข้าสู่โหมดรีบูตแบบโต้ตอบ <ref>
มันจะแสดงทั้งหมดกระทำระหว่างสถานะปัจจุบันของคุณและสิ่งที่คุณใส่ในสถานที่ของ ดังนั้นหาก<ref>
10 คอมมิชชันที่ผ่านมาจะแสดงการคอมมิททั้งหมด 10 ครั้ง
pick
ในด้านหน้าของแต่ละกระทำก็จะมีคำว่า ค้นหากระทำคุณต้องการที่จะได้รับการกำจัดและเปลี่ยนจากpick
การหรือfixup
squash
ใช้fixup
เพียงทิ้งที่กระทำข้อความและรวมการเปลี่ยนแปลงในบรรพบุรุษของมันทันทีในรายการ squash
คำหลักจะเป็นสิ่งเดียวกัน แต่ช่วยให้คุณสามารถแก้ไขข้อความกระทำของใหม่รวมกันกระทำ
โปรดทราบว่าการกระทำจะได้รับการยืนยันอีกครั้งตามลำดับที่ปรากฏในรายการเมื่อคุณออกจากตัวแก้ไข ดังนั้นหากคุณทำการกระทำชั่วคราวจากนั้นทำงานอื่นในสาขาเดียวกันและทำคุณสมบัติให้เสร็จในภายหลังจากนั้นการใช้ rebase จะช่วยให้คุณสามารถจัดเรียงคอมมิชชันและสควอชได้อีกครั้ง
คำเตือน:
การรีบูตแก้ไขประวัติ - อย่าทำเช่นนี้กับการกระทำใด ๆ ที่คุณได้แชร์ไปแล้วกับนักพัฒนาคนอื่น ๆ
stashing
ในอนาคตเพื่อหลีกเลี่ยงปัญหานี้ให้พิจารณาใช้git stash
ในการจัดเก็บงานที่ไม่มีข้อผูกมัดชั่วคราว
git stash save 'some message'
การดำเนินการนี้จะบันทึกการเปลี่ยนแปลงปัจจุบันของคุณไปทางด้านข้างในรายการที่ซ่อนของคุณ ด้านบนเป็นเวอร์ชันที่ชัดเจนที่สุดของคำสั่ง stash ทำให้สามารถแสดงความคิดเห็นเพื่ออธิบายสิ่งที่คุณกำลัง stashing นอกจากนี้คุณยังสามารถเรียกใช้git stash
และไม่มีอะไรอื่น แต่ไม่มีข้อความจะถูกเก็บไว้
คุณสามารถเรียกดูรายการที่ซ่อนของคุณด้วย ...
git stash list
สิ่งนี้จะแสดงการหยุดของคุณทั้งหมดสิ่งที่พวกเขาทำในสาขาและข้อความและที่จุดเริ่มต้นของแต่ละบรรทัดและตัวระบุสำหรับที่ซ่อนซึ่งมีลักษณะเช่นนี้stash@{#}
โดยที่ # คือตำแหน่งในอาร์เรย์ของการซ่อน
ในการคืนค่าสแต็ค (ซึ่งสามารถทำได้ในทุกสาขาโดยไม่คำนึงถึงตำแหน่งที่สร้างสแตชตั้งแต่แรก) คุณเพียงแค่รัน ...
git stash apply stash@{#}
อีกครั้งมี # คือตำแหน่งในอาร์เรย์ของการหยุดทำงาน หากที่เก็บที่คุณต้องการเรียกคืนอยู่ใน0
ตำแหน่ง - นั่นคือหากเป็นที่เก็บล่าสุด git stash apply
จากนั้นคุณก็สามารถเรียกใช้คำสั่งโดยไม่ต้องระบุตำแหน่งที่ซ่อนที่คอมไพล์จะถือว่าคุณหมายถึงคนสุดท้าย:
ตัวอย่างเช่นถ้าฉันพบว่าตัวเองทำงานผิดสาขา - ฉันอาจเรียกใช้ลำดับของคำสั่งต่อไปนี้
git stash
git checkout <correct_branch>
git stash apply
ในกรณีของคุณคุณย้ายสาขาไปอีกเล็กน้อย แต่ยังคงมีแนวคิดเดียวกันนี้อยู่
หวังว่านี่จะช่วยได้
git stash