सभी व्यावहारिक उद्देश्यों के लिए, पहली चीज जिसके बारे में आपको चिंतित होना चाहिए , वह है आपके पासवर्ड को बदलना! यह आपके प्रश्न से स्पष्ट नहीं है कि क्या आपकी गिट रिपॉजिटरी पूरी तरह से स्थानीय है या क्या आपके पास कहीं और रिमोट रिपॉजिटरी है या नहीं; यदि यह दूरस्थ है और दूसरों से सुरक्षित नहीं है, तो आपको समस्या है। यदि किसी ने इसे ठीक करने से पहले उस रिपॉजिटरी को क्लोन किया है, तो उनके पास आपके पासवर्ड की एक प्रति उनके स्थानीय मशीन पर होगी, और ऐसा कोई तरीका नहीं है कि आप उन्हें इतिहास के साथ गए अपने "निश्चित" संस्करण में अपडेट करने के लिए बाध्य कर सकें। केवल सुरक्षित चीज जो आप कर सकते हैं, वह है कि आपने अपना पासवर्ड किसी और जगह बदल दिया है।
उस रास्ते से बाहर, यहाँ यह कैसे तय करने के लिए है। GitHub ने उस प्रश्न का सटीक उत्तर दिया :
विंडोज उपयोगकर्ताओं के लिए ध्यान दें : इस कमांड में एकल के बजाय दोहरे उद्धरण (") का उपयोग करें
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:
यह FAQ से वर्तमान कोड है:
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 और अन्य ने उस दूरस्थ रिपॉजिटरी को क्लोन किया है, तो आप अब उस स्थिति में हैं जहां आप इतिहास का पुनर्लेखन कर रहे हैं। जब अन्य लोग इसके बाद आपके नवीनतम परिवर्तनों को खींचने की कोशिश करते हैं, तो उन्हें एक संदेश मिलेगा जो यह दर्शाता है कि परिवर्तन लागू नहीं किए जा सकते क्योंकि यह तेज़-फ़ॉरवर्ड नहीं है।
इसे ठीक करने के लिए, उन्हें या तो अपने मौजूदा रिपॉजिटरी को हटाना होगा और इसे फिर से क्लोन करना होगा, या गिट-रिबेस मैनपेज में "रिकवरिंग फ्रॉम UPSTREAM 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
संवेदनशील जानकारी के साथ प्रत्येक परिवर्तन के लिए। आखिरकार, आप अपनी शाखा पर वापस आ जाएंगे, और आप नए परिवर्तनों को सुरक्षित रूप से धकेल सकते हैं।