私はコミットしてディレクトリをgithubにプッシュしました。その後、無視するべきディレクトリを追加して.gitignore
ファイルを変更しました。すべてうまくいくが、(今は無視されている)ディレクトリはgithubのままである。
Githubとリポジトリの履歴からそのディレクトリを削除するにはどうすればいいですか?
.gitignore
ファイルの規則は、追跡されていないファイルにのみ適用されます。そのディレクトリの下のファイルはすでにあなたのリポジトリでコミットされているので、それらをアンステージし、コミットを作成し、そしてそれをGitHubにプッシュする必要があります。
git rm -r --cached some-directory
git commit -m 'Remove the now ignored directory "some-directory"'
git Push Origin master
リポジトリの履歴を書き換えることなしに履歴からファイルを削除することはできません。他の誰かがリポジトリを操作している場合、または複数のコンピュータからファイルを使用している場合は、これを実行しないでください。それでもやりたい場合は、git filter-branch
を使用して履歴を書き換えることができます - ここに役立つガイドがあります 。
さらに、git rm -r --cached some-directory
からの出力は次のようになります。
rm 'some-directory/product/cache/1/small_image/130x130/small_image.jpg'
rm 'some-directory/product/cache/1/small_image/135x/small_image.jpg'
rm 'some-directory/.htaccess'
rm 'some-directory/logo.jpg'
rm
はリポジトリに関するgitからのフィードバックです。ファイルはまだ作業ディレクトリにあります。
私はこれをします:
git rm --cached `git ls-files -i --exclude-from=.gitignore`
git commit -m 'Removed all files that are in the .gitignore'
git Push Origin master
これはgitの無視しているすべてのファイル/フォルダを削除するので、手動で一つずつ選択する必要がありません。
これは私のために働かなくなったようです、私は今します:
git rm -r --cached .
git add .
git commit -m 'Removed all files that are in the .gitignore'
git Push Origin master
ここに私の答えのように: どのようにGitリポジトリからディレクトリを削除するには?
ディレクトリを削除する手順
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git Push Origin master
次回のコミットでそのフォルダを無視する手順
次回のコミットでそのフォルダを無視するには、ルートに .gitignore という名前のファイルを1つ作成し、そのフォルダ名をそこに入れます。あなたは好きなだけ置くことができます
.gitignore fileはこのようになります。
/FolderName
Blundellの最初の答えは私にはうまくいきませんでした。しかしそれは私に正しい道を示した。私はこれと同じことをしました:
> for i in `git ls-files -i --exclude-from=.gitignore`; do git rm --cached $i; done
> git commit -m 'Removed all files that are in the .gitignore'
> git Push Origin master
下記のステートメントを実行して、最初に削除するファイルを確認することをお勧めします。
git ls-files -i --exclude-from=.gitignore
私はVisual Studio用のデフォルトの.gitignoreファイルを使用していましたが、プロジェクト内のすべてのlogフォルダーとbinフォルダーが削除されていることに気付きましたが、これは意図した動作ではありません。
Blundellからの答えはうまくいくはずですが、いくつかの奇妙な理由でそれは私とはしませんでした。最初のコマンドで出力されたファイル名を最初にファイルにパイプし、次にそのファイルをループ処理してそのファイルを1つずつ削除する必要がありました。
git ls-files -i --exclude-from=.gitignore > to_remove.txt
while read line; do `git rm -r --cached "$line"`; done < to_remove.txt
rm to_remove.txt
git commit -m 'Removed all files that are in the .gitignore'
git Push Origin master
注:この解決法は GithubデスクトップGUI でのみ機能します。
Github Desktop GUI を使うことで、とても簡単です。
フォルダを一時的に別の場所(プロジェクトフォルダ外)に移動します。
.gitignore
ファイルを編集して、githubページのマスターリポジトリを削除するフォルダエントリを削除します。
プロジェクトフォルダを確定して同期します。
フォルダをプロジェクトフォルダに移動します
.gitignore
ファイルを再編集してください。
それで全部です。
PowerShellを使用している場合は、次のコマンドを1つのコマンドとして試してください。
PS MyRepo> git filter-branch --force --index-filter
>> "git rm --cached --ignore-unmatch -r .\\\path\\\to\\\directory"
>> --Prune-empty --tag-name-filter cat -- --all
次に、git Push --force --all
です。