Untuk semua tujuan praktis, hal pertama yang harus Anda khawatirkan adalah MENGUBAH PASSWORDS ANDA! Tidak jelas dari pertanyaan Anda apakah repositori git Anda sepenuhnya lokal atau apakah Anda memiliki repositori jarak jauh di tempat lain; jika remote dan tidak diamankan dari orang lain, Anda memiliki masalah. Jika ada orang yang mengkloning repositori itu sebelum Anda memperbaikinya, mereka akan memiliki salinan kata sandi Anda di mesin lokal mereka, dan tidak mungkin Anda bisa memaksa mereka untuk memperbarui ke versi "tetap" Anda dengan itu hilang dari sejarah. Satu-satunya hal aman yang dapat Anda lakukan adalah mengubah kata sandi Anda menjadi sesuatu yang lain di mana pun Anda menggunakannya.
Dengan cara itu, inilah cara untuk memperbaikinya. GitHub menjawab pertanyaan itu sebagai FAQ :
Catatan untuk pengguna Windows : gunakan tanda kutip ganda (") sebagai ganti tunggal dalam perintah ini
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
Pembaruan 2019:
Ini adalah kode saat ini dari 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
Ingatlah bahwa setelah Anda mendorong kode ini ke repositori jarak jauh seperti GitHub dan yang lainnya telah mengkloning repositori jarak jauh itu, Anda sekarang berada dalam situasi di mana Anda menulis ulang sejarah. Ketika orang lain mencoba menarik perubahan terbaru Anda setelah ini, mereka akan mendapatkan pesan yang menunjukkan bahwa perubahan tidak dapat diterapkan karena itu bukan fast-forward.
Untuk memperbaikinya, mereka harus menghapus repositori yang sudah ada dan mengkloning kembali, atau mengikuti instruksi di bawah "MEMULIHKAN DARI REBASE UPSTREAM" di halaman manual git-rebase .
Kiat : Jalankangit rebase --interactive
Di masa depan, jika Anda secara tidak sengaja melakukan beberapa perubahan dengan informasi sensitif tetapi Anda perhatikan sebelum mendorong ke repositori jarak jauh, ada beberapa perbaikan yang lebih mudah. Jika komit terakhir adalah yang menambahkan informasi sensitif, Anda dapat menghapus informasi sensitif, kemudian jalankan:
git commit -a --amend
Itu akan mengubah komit sebelumnya dengan setiap perubahan baru yang Anda buat, termasuk seluruh penghapusan file yang dilakukan dengan a git rm
. Jika perubahan lebih lanjut dalam sejarah tetapi masih tidak didorong ke repositori jarak jauh, Anda dapat melakukan rebase interaktif:
git rebase -i origin/master
Itu membuka editor dengan komit yang Anda buat sejak nenek moyang terakhir bersama dengan repositori jarak jauh. Ubah "pilih" menjadi "edit" pada baris apa pun yang mewakili komit dengan informasi sensitif, dan simpan dan keluar. Git akan berjalan melalui perubahan, dan meninggalkan Anda di tempat di mana Anda dapat:
$EDITOR file-to-fix
git commit -a --amend
git rebase --continue
Untuk setiap perubahan dengan informasi sensitif. Akhirnya, Anda akan kembali ke cabang Anda, dan Anda dapat dengan aman mendorong perubahan baru.