banner
lca

lca

真正的不自由,是在自己的心中设下牢笼。

github不小心アップロードした機密ファイルの操作を取り消す方法はありますか?

GitHub を使用している場合、ある時点でコードをコミットする際に「機密情報」を誤って公開リポジトリにコミットしてしまった場合の対処方法を説明します。

もし、ローカルでコミットした後に GitHub のリモートリポジトリにプッシュする前に気づいた場合は、比較的簡単に修正できます。コードを修正し、git commit --amendコマンドを使用して修正をコミットします。

しかし、既に GitHub のリモートリポジトリにプッシュされていた場合や、時間が経過し、その後多くの新しいコミットが行われた場合は、より複雑な手順が必要になります。

  1. ステップ 1
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch ファイルのパス(プロジェクトの相対パス)" --prune-empty --tag-name-filter cat -- --all

以下のようになります:
git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch ./picgo/20220418121957.png' --prune-empty --tag-name-filter cat -- --all
  • --force:操作を強制的に実行し、一部のコミットが失われる可能性があります。
  • --index-filter:インデックスを操作して履歴を変更します。後ろの 'git rm --cached --ignore-unmatch ./picgo/20220418121957.png' は実行する具体的なコマンドであり、指定したパスに対応するファイルを削除します。
  • --prune-empty:処理中に空のコミットを削除します。
  • --tag-name-filter:タグを操作し、cat はタグ名を変更しないことを意味します。
  • -- --all:コマンドをすべてのブランチとタグに適用します。
  1. ステップ 2

すべてのブランチとタグを強制的にプッシュします。

git push origin --force --all
git push origin --force --tags
  1. ステップ 3
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin # refs/original の各リファレンスを削除します
git reflog expire --expire=now --all # リファレンス(ブランチ、タグなど)のreflogをクリーンアップします。reflogにはリファレンスの移動やリセットなどの操作履歴が記録されています
git gc --prune=now # ガベージコレクションを実行し、不要なオブジェクトをクリーンアップします
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。