回答:
.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からのフィードバックです。ファイルはまだ作業ディレクトリにあります。
-r
と--cached
。ありがとう。
-r
再帰を意味し、ディレクトリ全体を実行する場合に必要です。--cached
作業ディレクトリからそれらを削除するオーバーライドのgitのの正常な行動とコミットのために削除をステージングし、Gitはコミットだけの準備ができてステージング領域で動作します。ファイルのローカルコピーを保持することをgitに指示する方法です。
git reset name_of_file
でした:上記のことを機能させるために
私はこれをします:
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
foreach ($i in iex 'git ls-files -i --exclude-from=.gitignore') { git rm --cached $i }
ここの私の回答に従って:Gitリポジトリからディレクトリを削除するにはどうすればよいですか?
ディレクトリを削除する手順
git rm -r --cached FolderName
git commit -m "Removed folder from repository"
git push origin master
次のコミットでそのフォルダーを無視する手順
次のコミットからそのフォルダーを無視するには、ルートに.gitignoreという名前のファイルを1つ作成し 、そのフォルダー名をその中に入れます。好きなだけ置くことができます
.gitignoreファイルは次のようになります
/FolderName
ブランデルの最初の答えは私にはうまくいきませんでした。しかし、それは私に正しい方法を示しました。私はこのように同じことをしました:
> 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ファイルを使用していて、プロジェクトのすべてのログフォルダーとbinフォルダーが削除されており、これが意図したアクションではないことに気付きました。
注:このソリューションは、GithubデスクトップGUIでのみ機能します。
使用することによりGithubのデスクトップGUIをそれは非常に簡単です。
フォルダーを一時的に別の場所(プロジェクトフォルダーの外)に移動します。
.gitignore
ファイルを編集し、githubページのマスターリポジトリを削除するフォルダーエントリを削除します。
プロジェクトフォルダをコミットして同期します。
フォルダをプロジェクトフォルダに移動します
.gitignore
ファイルを再編集します。
それで全部です。
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
この方法は、標準の.gitignore動作を適用し、無視する必要があるファイルを手動で指定する必要がありません。
--exclude-from=.gitignore
もう使用できません:/-更新されたメソッドは次のとおりです:一般的なアドバイス:クリーンなリポジトリから始めてください -すべてがコミットされ、作業ディレクトリまたはインデックスで何も保留されておらず、バックアップを作成してください!
#commit up-to-date .gitignore (if not already existing)
#this command must be run on each branch
git add .gitignore
git commit -m "Create .gitignore"
#apply standard git ignore behavior only to current index, not working directory (--cached)
#if this command returns nothing, ensure /.git/info/exclude AND/OR .gitignore exist
#this command must be run on each branch
git ls-files -z --ignored --exclude-standard | xargs -0 git rm --cached
#optionally add anything to the index that was previously ignored but now shouldn't be:
git add *
#commit again
#optionally use the --amend flag to merge this commit with the previous one instead of creating 2 commits.
git commit -m "re-applied modified .gitignore"
#other devs who pull after this commit is pushed will see the newly-.gitignored files DELETED
新しく無視されたファイルをブランチのコミット履歴から削除する必要がある場合、または新しく無視されたファイルを今後のプルから削除したくない場合は、この回答を参照してください。
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
。
git filter-branch
違いはgit rm
何ですか?最初はのバージョンを使用する必要があると思っていましたが、git filter-branch
ここでのほとんどのコメントはの使用を推奨していgit rm
ます。私が理解しgit rm
ていることから、現在の作業ディレクトリとインデックスからそれを削除するだけです。ただし、以前に複数のコミットを追加した場合は、リポジトリに残ります。