มีความเป็นไปได้ที่จะเปลี่ยนกลับไฟล์ที่คอมมิตใน Git? ฉันได้ส่งคอมมิตไปที่ GitHub แล้วฉันก็รู้ว่ามีไฟล์ที่ฉันไม่ต้องการถูกพุช (ฉันยังแก้ไขไม่เสร็จ)
มีความเป็นไปได้ที่จะเปลี่ยนกลับไฟล์ที่คอมมิตใน Git? ฉันได้ส่งคอมมิตไปที่ GitHub แล้วฉันก็รู้ว่ามีไฟล์ที่ฉันไม่ต้องการถูกพุช (ฉันยังแก้ไขไม่เสร็จ)
คำตอบ:
ปรับปรุง: เพิ่มวิธีการที่ปลอดภัยยิ่งขึ้น
ตรวจสอบสถานะก่อนหน้า (ไม่เปลี่ยนแปลง) ของไฟล์ของคุณ สังเกตเห็นเส้นประคู่
git checkout HEAD^ -- /path/to/file
กระทำมัน:
git commit -am "revert changes on this file, not finished with it yet"
ผลักดันไม่ต้องใช้แรง:
git push
กลับไปทำงานที่ยังไม่เสร็จทำอีกครั้ง (3 ครั้งลูกศรขึ้น):
git checkout HEAD^ -- /path/to/file
หากต้องการแก้ไขการกระทำครั้งสุดท้ายของ HEAD ที่เก็บข้อมูลทำให้สับสนกับงานที่ผลักดันโดยบังเอิญของคุณในขณะที่อาจเกิดความขัดแย้งกับเพื่อนร่วมงานของคุณที่อาจดึงมันไปแล้วและใครจะเป็นคนที่มีผมหงอกและเสียเวลามากมายในการพยายามกระทบยอดหัวหน้าสาขาในพื้นที่ของเขา กับส่วนกลาง:
ในการลบการเปลี่ยนแปลงไฟล์จากการคอมมิตล่าสุด:
ในการเปลี่ยนไฟล์กลับเป็นสถานะก่อนการคอมมิตครั้งสุดท้ายให้ทำ:
git checkout HEAD^ /path/to/file
ในการอัปเดตการคอมมิตล่าสุดด้วยไฟล์ที่เปลี่ยนกลับให้ทำ:
git commit --amend
เพื่อผลักดันการคอมมิตที่อัปเดตไปยัง repo ให้ทำ:
git push -f
จริงๆให้พิจารณาใช้วิธีการที่ต้องการที่กล่าวถึงก่อนหน้านี้
git checkout HEAD~2 /path/to/file
? แก้ไข: ดูเหมือนว่าสิ่งที่ฉันต้องการในกรณีของฉันเป็นเพียงแค่git rm /path/to/file
หากคุณต้องการลบไฟล์ออกจาก repo ระยะไกลก่อนอื่นให้ลบออกจากโปรเจ็กต์ของคุณด้วยตัวเลือก --cache จากนั้นกด:
git rm --cache /path/to/file
git commit -am "Remove file"
git push
(วิธีนี้ใช้งานได้แม้ว่าไฟล์จะถูกเพิ่มไปยัง repo ระยะไกลที่กระทำบางอย่างที่ผ่านมา) อย่าลืมเพิ่มลงใน. gitignore นามสกุลไฟล์ที่คุณไม่ต้องการพุช
คุณสามารถเปลี่ยนไฟล์กลับเป็นการแก้ไขที่ระบุได้เพียงไฟล์เดียว
ก่อนอื่นคุณสามารถตรวจสอบว่าไฟล์ใดที่คอมมิตถูกเปลี่ยนแปลง
git log path/to/file.txt
จากนั้นคุณสามารถชำระเงินไฟล์ด้วยหมายเลขการแก้ไข
git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /path/to/file.txt
หลังจากนั้นคุณสามารถกระทำและผลักดันอีกครั้ง
รีเซ็ตไฟล์ให้อยู่ในสถานะที่ถูกต้องคอมมิตและพุชอีกครั้ง
หากคุณแน่ใจว่ายังไม่มีใครดึงการเปลี่ยนแปลงของคุณคุณสามารถใช้--amend
เมื่อทำการคอมมิตเพื่อแก้ไขคอมมิตก่อนหน้าของคุณ (เช่นเขียนประวัติใหม่) จากนั้นกด ฉันคิดว่าคุณจะต้องใช้-f
ตัวเลือกนี้เมื่อกดเพื่อบังคับให้ผลัก
รับรหัสแฮชของการคอมมิตล่าสุด
git log
git revert <hash_code_from_git_log>
git push
ตรวจสอบใน GHR คุณอาจได้รับสิ่งที่คุณต้องการหวังว่านี่จะเป็นประโยชน์