[解決済み] git で作成された大きな .pack ファイルを削除する
質問
あるブランチに大量のファイルをチェックインし、マージした後、それらを削除しなければなりませんでした。
を使用してすべてのファイルを削除しました。
git rm -rf xxxxxx
を実行し、さらに
--cached
というオプションもあります。
現在、以下のディレクトリにある大きな.packファイルを削除する方法を誰か教えてください。
.git/objects/pack/pack-xxxxxxxxxxxxxxxxx.pack
まだ持っているがもう使っていないブランチを削除すればいいのでしょうか?それとも何か他に実行しなければならないことがあるのでしょうか?
どの程度の違いがあるのかわかりませんが、ファイルに対して南京錠が表示されます。
ありがとうございます。
EDIT
以下は私の bash_history からの抜粋で、どのようにしてこの状態になったかを知ることができます (この時点では 'my-branch' という git ブランチで作業していて、さらにフォルダやファイルを含むフォルダを持っていると仮定します)。
git add .
git commit -m "Adding my branch changes to master"
git checkout master
git merge my-branch
git rm -rf unwanted_folder/
rm -rf unwanted_folder/ (not sure why I ran this as well but I did)
以下も実行したつもりですが、bash_historyに他のものと一緒に出てきません。
git rm -rf --cached unwanted_folder/
また、いくつかのgitコマンドを実行したつもりだったのですが、(例えば
git gc
) を使ってパックファイルを整頓しようとしましたが、.bash_history ファイルにも表示されません。
どうすればいいですか?
問題は、ファイルを削除しても、以前のリビジョンにはまだ存在していることです。これは、たとえ何かを削除したとしても、履歴にアクセスすることでそれを取り戻すことができるという、gitの本質的なポイントです。
あなたがやろうとしていることは、履歴の書き換えと呼ばれ、これには
git filter-branch
コマンドを使用します。
GitHubのサイトには、この問題についての説明があります。 https://help.github.com/articles/remove-sensitive-data
あなたの質問にもっと直接的に答えるために、基本的に実行する必要があるのは、このコマンドに
unwanted_filename_or_folder
を適宜置き換えてください。
git filter-branch --index-filter 'git rm -r --cached --ignore-unmatch unwanted_filename_or_folder' --prune-empty
これは、レポのアクティブな履歴から、ファイルへの参照をすべて削除します。
次のステップでは、GCサイクルを実行して、ファイルへのすべての参照を強制的に失効させ、パックファイルからパージします。これらのコマンドでは、何も置き換える必要はありません。
git for-each-ref --format='delete %(refname)' refs/original | git update-ref --stdin
# or, for older git versions (e.g. 1.8.3.1) which don't support --stdin
# git update-ref $(git for-each-ref --format='delete %(refname)' refs/original)
git reflog expire --expire=now --all
git gc --aggressive --prune=now
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] git pull」と「git fetch」の違いは何ですか?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] ローカルファイルシステムからファイルを削除せずに、Git リポジトリからファイルを削除する
-
[解決済み] Git で現在のブランチ名を取得するには?
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み] Git で最新のコミットを新しいブランチに移動する
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Git, fatal: リモートエンドが予期せずハングアップしました。
-
[解決済み】以下の追跡されていないワーキングツリーファイルは、マージによって上書きされますが、私は気にしません。
-
[解決済み】ファイルのアンリンクに失敗しました。もう一度試してみるべきですか?
-
[解決済み] あなたのブランチは 'origin/master' より 3 コミット進んでいます。
-
[解決済み] [email protected] へのいくつかの参考文献のプッシュに失敗しました。
-
git revert 複数コミット
-
[解決済み】マージが終了していません(MERGE_HEADは存在します)。
-
[解決済み] 複数のgitコミットを元に戻すには?
-
[解決済み] 現在の支店にはトラッキング情報がありません
-
[解決済み] エラーです。リベースを使用してプルできません。あなたはステージングされていない変更を持っています