สำหรับการใช้งานจริงสิ่งแรกที่คุณควรกังวลคือเปลี่ยนรหัสผ่านของคุณ! ยังไม่ชัดเจนจากคำถามของคุณว่าที่เก็บ git ของคุณอยู่ในพื้นที่ทั้งหมดหรือว่าคุณมีที่เก็บระยะไกลที่อื่น หากอยู่ห่างไกลและไม่ปลอดภัยจากผู้อื่นคุณมีปัญหา หากมีใครโคลนที่เก็บข้อมูลนั้นก่อนที่คุณจะแก้ไขปัญหานี้พวกเขาจะมีสำเนารหัสผ่านของคุณในเครื่องของพวกเขาและไม่มีวิธีใดที่คุณสามารถบังคับให้พวกเขาอัปเดตเป็นรุ่น "คงที่" โดยหายไปจากประวัติ สิ่งเดียวที่ปลอดภัยที่คุณทำได้คือเปลี่ยนรหัสผ่านเป็นอย่างอื่นทุกที่ที่คุณใช้
ด้วยวิธีดังกล่าวนี่คือวิธีแก้ไข GitHub ตอบคำถามนั้นอย่างแน่นอนว่าเป็นคำถามที่พบบ่อย :
หมายเหตุสำหรับผู้ใช้ Windows : ใช้เครื่องหมายคำพูดคู่ (") แทนคำเดี่ยวในคำสั่งนี้
git filter-branch --index-filter \
'git update-index --remove PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' <introduction-revision-sha1>..HEAD
git push --force --verbose --dry-run
git push --force
อัปเดต 2019:
นี่คือรหัสปัจจุบันจากคำถามที่พบบ่อย:
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA" \
--prune-empty --tag-name-filter cat -- --all
git push --force --verbose --dry-run
git push --force
โปรดทราบว่าเมื่อคุณส่งรหัสนี้ไปที่ที่เก็บระยะไกลเช่น GitHub และคนอื่น ๆ ได้ทำการโคลนที่เก็บระยะไกลนั้นตอนนี้คุณอยู่ในสถานการณ์ที่คุณเขียนประวัติใหม่ เมื่อคนอื่นลองดึงการเปลี่ยนแปลงล่าสุดของคุณหลังจากนี้พวกเขาจะได้รับข้อความแจ้งว่าไม่สามารถใช้การเปลี่ยนแปลงได้เพราะไม่ใช่การส่งต่อที่รวดเร็ว
เพื่อแก้ไขปัญหานี้พวกเขาจะต้องลบพื้นที่เก็บข้อมูลที่มีอยู่และพวกเขาอีกครั้งโคลนมันหรือทำตามคำแนะนำภายใต้หัวข้อ "การกู้คืนจากต้นน้ำ Rebase" ในmanpage-git rebase
เคล็ดลับ : ดำเนินการgit rebase --interactive
ในอนาคตหากคุณยอมรับการเปลี่ยนแปลงบางอย่างด้วยข้อมูลที่ละเอียดอ่อน แต่คุณสังเกตเห็นก่อนที่จะผลักดันไปยังที่เก็บข้อมูลระยะไกลจะมีการแก้ไขที่ง่ายขึ้น หากคุณยอมรับเป็นคนสุดท้ายที่จะเพิ่มข้อมูลที่ละเอียดอ่อนคุณสามารถลบข้อมูลที่ละเอียดอ่อนจากนั้นเรียกใช้:
git commit -a --amend
ที่จะแก้ไขก่อนหน้านี้กระทำกับการเปลี่ยนแปลงใหม่ ๆ git rm
ที่คุณได้ทำรวมทั้งการลบไฟล์ทั้งหมดทำได้ด้วย หากการเปลี่ยนแปลงนั้นย้อนกลับไปในประวัติศาสตร์ แต่ยังไม่ได้ถูกผลักไปยังที่เก็บระยะไกลคุณสามารถทำการรีบูตแบบโต้ตอบ:
git rebase -i origin/master
ที่เปิดตัวแก้ไขด้วยการกระทำที่คุณทำไว้ตั้งแต่บรรพบุรุษร่วมกันครั้งสุดท้ายของคุณกับที่เก็บระยะไกล เปลี่ยน "เลือก" เป็น "แก้ไข" บนบรรทัดใด ๆ ที่แสดงถึงการส่งข้อมูลที่ละเอียดอ่อนและบันทึกและออก Git จะดำเนินการตามการเปลี่ยนแปลงต่างๆและวางคุณไว้ในจุดที่คุณสามารถ:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
สำหรับการเปลี่ยนแปลงแต่ละครั้งด้วยข้อมูลที่ละเอียดอ่อน ในที่สุดคุณจะกลับมาที่สาขาของคุณและคุณสามารถผลักดันการเปลี่ยนแปลงใหม่ได้อย่างปลอดภัย