あなたが
$ git lola --name-status
* e709131 (HEAD, master) bar
| A bar
* 61493ac ABC/file - 3.ext
| A ABC/file - 3.ext
* 34cce9e ABC/file - 2.ext
| A ABC/file - 2.ext
* 115e6d5 ABC/file - 1.ext
| A ABC/file - 1.ext
* 5ea5b42 foo
A foo
ノートの歴史で始まる言う:git lola非標準が、非常に便利な別名です。
git rm
は、サブツリーを削除するオプションをサポートしています。
-r
大手ディレクトリ名が与えられたときに再帰的に削除を許可します。
$ git filter-branch --index-filter 'git rm --cached -r --ignore-unmatch ABC' \
--prune-empty --tag-name-filter cat -- --all
を実行した後、あなたは結果に満足している場合は、今
$ git update-ref -d refs/original/refs/heads/master
で古いマスターを削除し、
Rewrite 115e6d5cd06565ca08f1e5c98c4b91246cf59fa1 (2/5)rm 'ABC/file - 1.ext'
Rewrite 34cce9e90f832460137e620ebacc8a73a99e64ce (3/5)rm 'ABC/file - 1.ext'
rm 'ABC/file - 2.ext'
Rewrite 61493ac3211808f34f616dbc33d51d193b3f45a3 (4/5)rm 'ABC/file - 1.ext'
rm 'ABC/file - 2.ext'
rm 'ABC/file - 3.ext'
Rewrite e709131f1fe6103adf37616c9fa500994aeb30d0 (5/5)rm 'ABC/file - 1.ext'
rm 'ABC/file - 2.ext'
rm 'ABC/file - 3.ext'
Ref 'refs/heads/master' was rewritten
に似た出力が表示されます。
の履歴があります
$ git lola --name-status
* 19680d4 (HEAD, master) bar
| A bar
* 5ea5b42 foo
A foo
2番目の質問に答えるには、ABC/file - 2.ext
のみを削除するとします。クォーテーションの2つの層が必要であることを覚えておいてください:コマンド全体のための1つの層と、そのコマンドの引数の中のスペースをエスケープするもう1つの層、削除するファイルの名前。そうする
一つの方法は、
$ git filter-branch --index-filter \
'git rm --cached --ignore-unmatch "ABC/file - 2.ext"' --prune-empty \
--tag-name-filter cat -- --all
ある単一引用符内の二重引用符に注意してください。
あなたの代わりにこのコマンドを実行していた場合、あなたは彼らがすべてのコミットから削除するなぜ、あなたの歴史は
$ git lola
* a8d1b0d (HEAD, master) bar
* cff0c4e ABC/file - 3.ext
* 115e6d5 ABC/file - 1.ext
* 5ea5b42 foo
になったでしょうか?コミットはプロジェクトのスナップショットです。いくつかのディレクトリやファイルを削除する場合は、プロジェクトから削除する新しいコミットを作成する必要があります。 –
@WouterJリポジトリの履歴から不要な大きなファイルを削除したり、機密情報のあるファイルを削除することができます。 –