ฉันได้แก้ไขสองไฟล์a
, b
ในช่วงกระทำ แต่b
ไม่ควรผูกไฟล์ไว้เวิร์กโฟลว์จะแก้ไขสิ่งนี้คืออะไร
ฉันได้แก้ไขสองไฟล์a
, b
ในช่วงกระทำ แต่b
ไม่ควรผูกไฟล์ไว้เวิร์กโฟลว์จะแก้ไขสิ่งนี้คืออะไร
คำตอบ:
อัปเดต (สองสามปีต่อมา)
ไม่สำคัญที่จะลบออกจากดัชนีเท่านั้น
จริง: คุณสามารถรีเซ็ตไฟล์เป็นเนื้อหาดัชนีได้ง่ายพอเนื่องจากคำตอบล่าสุด (เขียนโดยMatt Connolly ) แนะนำ:
git reset HEAD^ path/to/file/to/revert
HEAD^
ช่วยให้ไฟล์เพื่อเข้าถึงเนื้อหาในก่อนหน้านี้กระทำก่อนที่จะเป็นคนสุดท้าย
จากนั้นคุณก็ทำได้git commit --amend
ตามที่ฉันเขียนไว้ด้านล่าง
ด้วย Git 2.23 (สิงหาคม 2019) คุณอาจใช้คำสั่งใหม่git restore
git restore --source=HEAD^ --staged -- path/to/file/to/revert
สั้น:
git restore -s@^ -S -- path/to/file/to/revert
คุณสามารถทำได้อีกครั้งgit commit --amend
ตามที่ฉันเขียนไว้ด้านล่าง
คำตอบเดิม (มกราคม 2011)
หากนี่คือการกระทำครั้งสุดท้ายของคุณ (และคุณยังไม่ได้ผลักเลย) คุณสามารถแก้ไขได้:
(ซ่อนแรกหรือบันทึกb
)
git commit --amend
จากนั้นลบ b, กระทำซ้ำอีกครั้ง กู้คืน b และคุณทำเสร็จแล้ว
--amend
ใช้เพื่อแก้ไขเคล็ดลับของสาขาปัจจุบัน
เตรียมทรีวัตถุที่คุณต้องการแทนที่การคอมมิชชันล่าสุดตามปกติ (ซึ่งรวมถึงพา ธ -i / -o และพา ธ ที่ชัดเจนปกติ) และตัวแก้ไขบันทึกการคอมมิชชันถูก seeded ด้วยข้อความการคอมมิตจากส่วนปลายของสาขาปัจจุบัน
คอมมิชชันที่คุณสร้างจะแทนที่คำแนะนำปัจจุบัน - ถ้าเป็นการรวมมันจะมีพาเรนต์ของทิปปัจจุบันเป็นผู้ปกครอง - ดังนั้นคอมมิชชันปัจจุบันจะถูกยกเลิก
git diff --name-only HEAD^
- (เป็นทางเลือก) ใช้เพื่อแสดงรายการไฟล์ที่เปลี่ยนแปลงในการส่งครั้งล่าสุดgit reset HEAD^ path/to/file/to/revert
- เพื่อรีเซ็ตดัชนีเป็นเวอร์ชันสุดท้ายโดยปล่อยให้สำเนาทำงานไม่ถูกแตะต้องgit commit --amend
- เพื่อแก้ไขล่าสุดที่กระทำเพื่อรวมการเปลี่ยนแปลงดัชนีgit commit -a --amend
(เช่นอย่าเพิ่มไฟล์) สำหรับขั้นตอนที่ 3 หรือคุณจะยอมรับการเปลี่ยนแปลงสำเนาการทำงานซึ่งเป็นการแก้ไขที่คุณพยายามลบ ขั้นตอนที่เป็นทางเลือก 2.5 อาจเป็นการgit checkout path/to/file/to/revert
ล้างสำเนาทำงานของคุณด้วย
git rm --cached path/to/file/to/revert
จะยกเลิกการเพิ่มไฟล์โดยไม่ต้องลบออกจากทรี
อีกทางเลือกหนึ่งถ้าคุณใช้git gui
คุณเพียงแค่เลือกตัวเลือก "แก้ไขการกระทำครั้งสุดท้าย" ไฟล์ที่เพิ่มจะปรากฏในรายการ "ฉาก" คลิกที่ไอคอนเพื่อย้ายไปยังรายการ "ไม่ดำเนินการ"
หากคุณต้องการลบ b จากการส่งครั้งล่าสุด
git rm --cached b (will preserve the file in the working tree but remove it from the index)
git commit --amend
หากคุณต้องการลบการเปลี่ยนแปลงทั้งหมดเป็น b ในการส่งครั้งล่าสุด
(backup b)
(modify b to state before incorrect commit)
git commit --amend
(restore b)
git rm --cached
และทำไปกับการสำรองข้อมูล / เรียกคืนการเต้นรำ (-1)
อีกทางเลือกหนึ่งที่ไม่ต้องการแฮ็กดัชนี แต่กระนั้นก็ยังมีข้อความยืนยันเก่า:
$ git reset HEAD^
$ git add <all the files you want, excluding the one you don't want>
$ git commit -C HEAD@{1}
ฉันชอบสิ่งนี้เพราะ (ก) ใช้คำสั่งที่ฉันใช้เป็นประจำและ (ข) ฉันสามารถทำได้git add -p
เพื่อหาว่ามันคืออะไรที่ฉันต้องการจะยอมรับ
... Then stash/delete b, re-commit..
ที่นี่ไม่ควรใช้คำว่าThen
เป็นafter
? ---amend
หลังจาก stach / delete b, ...