0

node_modulesまたはcomponentsを追加するのを忘れてしまうことがよく.gitignoreあり、それらは私の git commit に巻き込まれて github にプッシュされます (アップロードには永遠に時間がかかります)。これらのフォルダーのすべてのインスタンスをすべてのコミットから削除し、それらを作業ディレクトリに保持する方法はありますか?

4

3 に答える 3

2

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' -- --all

于 2013-04-06T22:07:50.463 に答える
2

現在のリビジョンから削除する簡単な方法:

使用するgit -rm -r --cached

--cached オプションは、ファイルまたはディレクトリをローカルの作業ディレクトリに保持し、git から削除します。

からgit help rm:

--cached
     Use this option to unstage and remove paths only from the index. 
     Working tree files, whether modified or not, will be left alone.

https://www.kernel.org/pub/software/scm/git/docs/git-rm.htmlを参照してください

すべてのリビジョンから削除:

すべてのリビジョンからファイル/ディレクトリを本当に削除する必要がある場合は、このスレッドとこれ専用の git ヘルプ ページを参照してください。

機密ファイルとそのコミットを Git 履歴から削除する

https://help.github.com/articles/remove-sensitive-data

于 2013-04-06T19:14:14.170 に答える
1

git -rm -r --cachedjszobody が提案したように使用するかgit reset HEAD、入力が少し少なく、git status(実際に を呼び出す前にgit commit) によって提案された方法でコミットからファイルを削除します。これをアンステージングと呼びます。

ただし、git commitこれらのフォルダーを簡単に削除する方法はありません。最後のコミットで保持したくない変更が導入された場合は、ローカル コピーを変更して希望する状態にし、実行git add .してgit commit --amend. 不要な変更がさらに後のコミットまたは複数のコミットで導入された場合は、git rebase -i. それについてのマニュアルページを読むか、いくつかのチュートリアルを探すことをお勧めします。

すでに変更を github にプッシュしている場合はgit push -f、リベース後に実行するか、修正後に実行する必要があります。チームで作業している場合、まだプッシュされたコミットをリベースすることは、チームの他のメンバーとは異なるハッシュをコミットに与えるため、悪い考えです。

于 2013-04-06T20:03:41.630 に答える