28

以前は、次の.gitignoreファイルがありました。

...
config/database.yml
.DS_Store

後でapp_config.yml、config ディレクトリにファイルを作成してコミットしました。

app_config.ymlここで、git リポジトリーにファイルが必要ないことに気付きました。そして、.gitignoreファイルを変更しました:

...
config/app_config.yml
config/database.yml
.DS_Store

今、コミットすると、そのapp_config.ymlファイルはまだリポジトリにあります。そのファイルをレポから削除したい。どうすればいいですか?

4

2 に答える 2

56

無視してもファイルが削除されない」で述べたように (次の引用はNick Quaranto
のすばらしい記事で 、彼のブログgit readyで「git one commit at a time を学ぶ」):

ファイルを無視するように Git に指示すると、Git はそのファイルの変更の監視のみを停止し、それ以外は何も停止しません。
これは、履歴がまだファイルを覚えていて、それを持っていることを意味します

リポジトリからファイルを削除したいが、それを作業ディレクトリに残したい場合は、単純に次を使用します。

git rm --cached <file>

ただし、これでもファイルは履歴に保持されます。

実際に履歴から削除したい場合は、次の 2 つのオプションがあります。

  • リポジトリのコミットを書き換えるか、または
  • 最初からやり直します。

どちらのオプションも本当に最悪ですが、それには正当な理由があります。Git はデータを失わないように懸命に努力します。
リベースの場合と同様に、Git は破壊的な操作であるため、これらの種類のオプションについて考える必要があります。

実際に履歴からファイルを削除したい場合git filter-branchは、探している弓のこです。プロジェクトのコミットを文字通り書き直すため、使用する前に必ずマンページ
を読んでください。これは実際には、いくつかのアクションにとって優れたツールであり、作成者のコミットを完全に削除してプロジェクトのルート フォルダーを移動するなど、あらゆる種類の操作を実行できます。すべてのリビジョンからファイルを削除するコマンドは次のとおりです。

git filter-branch --index-filter 'git rm --cached <file>' HEAD

このアクションは、リポジトリに配置されている可能性のある機密情報や機密情報を吹き飛ばす必要がある場合に間違いなく役立ちます

于 2009-03-09T12:04:01.907 に答える