私の最初のコミットにはいくつかのログファイルが含まれていました。をに追加*log
しました.gitignore
。次に、リポジトリからログファイルを削除します。
git rm mylogfile.log
リポジトリからファイルを削除しますが、ローカルファイルシステムからも削除します。
ファイルのローカルコピーを削除せずに、このファイルをリポジトリから削除するにはどうすればよいですか?
私の最初のコミットにはいくつかのログファイルが含まれていました。をに追加*log
しました.gitignore
。次に、リポジトリからログファイルを削除します。
git rm mylogfile.log
リポジトリからファイルを削除しますが、ローカルファイルシステムからも削除します。
ファイルのローカルコピーを削除せずに、このファイルをリポジトリから削除するにはどうすればよいですか?
回答:
manファイルから:
ときに
--cached
指定され、段階的な内容は、ファイルがちょうどインデックスから削除することができるように、枝の先端またはディスク上のファイルのいずれかと一致する必要があります。
したがって、単一のファイルの場合:
git rm --cached mylogfile.log
そして単一のディレクトリの場合:
git rm --cached -r mydirectory
svn rm --keep-local
です。
git pull
は、コミット後のファイルを削除しますgit rm
git commit -m "Commit message"
およびを使用する必要があることgit push
です。他に段階的な変更がある場合は(で確認git status
)、それらもこの時点でコミットされます。
git rm --cached mylogfile.log
、リポジトリからファイルを削除します。本番システムでファイルが失われるのを防ぐために、ファイルのバックアップを作成し、この後にプルします。前述のようにファイルは削除され、バックアップからコピーして戻す必要があります。これはかなりの苦痛ですが、私はこの問題のより良い解決策を見つけられませんでした。
フォルダー全体(Resharperファイルなど)をリポジトリから削除するには、次のようにします。
git rm -r --cached folderName
私はいくつかのリシャーパーファイルをコミットしましたが、それらを他のプロジェクトユーザーのために保持したくありませんでした。
Git Push repo branch
リモートからファイルを実際に削除するには、aを実行する必要があります。
ローカルファイルシステムからファイルを削除せずに、.gitignoreに基づいてリポジトリからファイルを削除することもできます。
git rm --cached `git ls-files -i -X .gitignore`
または、Windows Powershellの場合:
git rm --cached $(git ls-files -i -X .gitignore)
git ls-files -i -X .gitignore | xargs -I{} git rm --cached "{}"
。持っている素晴らしいツールですので...、ここでは答えにこのソリューションを変更または追加することを検討してください
.gitkeep
、リポジトリ内の空のフォルダを保持するようなファイルも削除するかどうかテストする必要があります。例えば。.gitignore
フォルダuploads
を含み、リポジトリはを追跡することを強制されます.gitkeep
。その下のレポからすべてuploads
を削除することによっても削除されます.gitkeep
。
ここの私の回答に従って:https : //stackoverflow.com/questions/6313126/how-to-remove-a-directory-in-my-github-repository
ディレクトリを削除する手順
git rm -r --cached File-or-FolderName
git commit -m "Removed folder from repository"
git push origin master
次のコミットでそのフォルダーを無視する手順
次のコミットからそのフォルダーを無視するには、ルートに.gitignoreという名前のファイルを1つ作成し 、そのフォルダー名をその中に入れます。好きなだけ置くことができます
.gitignoreファイルは次のようになります
/FolderName
また、機密データ(パスワードを含むファイルなど)をコミットした場合は、リポジトリの履歴から完全に削除する必要があります。これを行う方法を説明するガイドは次のとおりです。http: //help.github.com/remove-sensitive-data/
より一般的なソリューション:
.gitignore
ファイルを編集します。
ECHO mylogfile.log >> .gitignore
インデックスからすべてのアイテムを削除します。
git rm -r -f --cached .
インデックスを再構築します。
git add .
新しいコミットをする
git commit -m "Removed mylogfile.log"
rm --cashed
が引っ張ったときに最終的にファイルを削除するということです?そして、これは「ローカルファイルシステムからファイルを削除せずにリポジトリからファイルを削除する」と言ったときに必要なことではありません。さて、なぜ上記の解決策が受け入れられなかったのでしょうか。おそらく、OPは単独で機能し、プルされなかったのでしょうか。ダンノ。私はgithubの「一度プッシュすると常にそこにある」問題を理解しています
Gitでは、これらのファイルが変更されていないと想定して、それらのファイルを無視できます。これは、
git update-index --assume-unchanged path/to/file.txt
コマンドを実行することによって行われます。ファイルをそのようにマークすると、gitはそのファイルの変更を完全に無視します。git statusまたはgit diffを実行しても表示されず、コミットされることもありません。
(https://help.github.com/articles/ignoring-filesから)
したがって、それを削除するのではなく、永久に変更を無視します。これはローカルでのみ機能すると思います。そのため、同僚は上記と同じコマンドを実行しない限り、変更を見ることができます。(ただし、これを確認する必要があります。)
注:これは質問に直接回答するのではなく、他の回答のコメントにあるフォローアップの質問に基づいています。
ファイルを追跡解除し、ローカルおよびリモートのリポジトリから削除しない場合は、次のコマンドを使用します。
git update-index --assume-unchanged file_name_with_path
上記の答えは私にはうまくいきませんでした。以前filter-branch
はすべてのコミット済みファイルを削除していました。
gitリポジトリからファイルを削除するには:
git filter-branch --tree-filter 'rm file'
次のコマンドを使用して、gitリポジトリからフォルダーを削除します。
git filter-branch --tree-filter 'rm -rf directory'
これにより、すべてのコミットからディレクトリまたはファイルが削除されます。
次を使用してコミットを指定できます。
git filter-branch --tree-filter 'rm -rf directory' HEAD
または範囲:
git filter-branch --tree-filter 'rm -rf vendor/gems' t49dse..HEAD
すべてをリモートにプッシュするには、次のようにします。
git push origin master --force
git rm -r --cached NAME
、ローカルのgitリポジトリから削除し、後で引っ張る人に影響を与えないようにします(gitからファイルまたはディレクトリの履歴を削除することにより)
注:これは機密情報の履歴には対応していません。
このプロセスは、gitで何が行われているのかを理解するのに間違いありません。時間をかけて、それを得て、私は次のようなプロセスを実行することを学びました:
.gitignore
それらを無視するためにプロジェクトを追加または更新します-あなたのような多くの場合、親ディレクトリは、例えばlog/
使用する正規表現になります。.gitignore
ファイルの変更をコミットしてプッシュします(プッシュが必要かどうかはわかりませんが、行っても害はありません)。git remove --cached some_dir/
git add .
git commit -m"removal"