5

公開されているリポジトリへのアクセス権がないファイルを誤ってプッシュしました。

その単一のファイルをリポジトリから選択的に完全に削除して、そのデータを完全に削除するにはどうすればよいですか?

4

2 に答える 2

6

この場合、 Git Filter -Branch はあなたの友達です。

于 2012-05-14T14:46:29.017 に答える
2

ファイルを追加したコミットが最新のものであると仮定します。

git reset --hard HEAD^
git push --force

リポジトリにさらにコミットがある場合は、対話型リベースを使用してそのコミットを消去できます。核にしたいものの前のコミットであるgit rebase -i xxxと一緒に使用してください。xxx次に、エディターで、「悪い」コミットを含む行を削除します。エディターを保存して終了すると、そのコミットは永久に失われます。コミット全体を削除できない場合は、ファイル内を に置き換えpickeditコミットを変更し (たとえば、ステージング領域からファイルを削除する)、実行することができます。git rebase --continue

ただし、レポからプルした人​​は全員、同じリベースを手動で実行する必要があります。しかし、とにかくそのファイルはすでに公開されているので、間違いを元に戻すために履歴を書き換えるべきではありません。

git-filter-branchファイルを削除するために使用できるすべてのリベースの代わりに、GitHub ヘルプで説明されています

git filter-branch --index-filter 'git rm --cached --ignore-unmatch NAME_OF_THE_FILE' --prune-empty -- --all

もちろんgit push --force、この操作の後にも必要です。履歴も書き換えられるためです (誰かがそのリポジトリからプルして作業を開始した場合のすべての注意事項があります)。リポジトリが github にある場合は、それらに連絡してリポジトリのキャッシュをクリアすることも忘れないでください。

于 2012-05-14T14:43:45.897 に答える