Git でのコミットファイルの削除
現在のコミットに重要なファイルを手動で特定し、作業ディレクトリから不要なファイルを削除する必要があることに気付く場合があります。特に、チームに多くの開発者がいる大規模なプロジェクトを構築する場合、手動プロセスでは困難になる可能性があります。
リポジトリに間違ったファイルをコミットし、それをブランチから削除したいとします。git reset
コマンドは、Git を処理するときに便利なツールです。このコマンドは、特定の Git コミットまたはブランチ内の作業ディレクトリから特定のファイルを削除するために使用されます。たとえば、HEAD
が指すコミットからファイル"README.md"
を削除する場合は、次のコマンドを実行できます。
git reset -soft HEAD@{1}
次のコマンドを実行することにより、作業ディレクトリの変更を保持しながら、特定のコミットからファイルを削除できます。
git reset HEAD@{1}
コミットからファイルを削除するために使用されるコマンドは git reset
であることがわかっています。このコマンドは、-p
および -u
オプションとともに使用できます。オプション -p
を使用すると、変更を作業ディレクトリに保持しながら、インデックスをリセットできます。オプション -u
は、インデックスと作業ディレクトリをリセットします。
次の例を使用して、コミットからファイルを削除する練習をしてみましょう。新しいコミットを作成し、file1
という名前のファイルを追加したとします。ここで、このファイルをコミットから削除します。次のコマンドを使用してこれを開始できます。
git reset -p HEAD~1
このコマンドは、Git にインデックスと作業ディレクトリをコミット HEAD~1
にリセットするように命令します。コミットを作成する前に、file2
を作業ディレクトリに追加します。ここで、このファイルを作業ディレクトリから削除しますが、インデックスには保持します。次のコマンドを使用して開始できます。
git reset -u HEAD~1
このコマンドは、Git にインデックスと作業ディレクトリをコミット HEAD~1
にリセットするように命令します。ここで、インデックスに 3つのファイルを追加し、file3
を除くすべてのファイルをインデックスから削除するとします。次のコマンドを使用してこれを開始できます。
git reset -- '-p -- file3'
このコマンドは、Git に file3
を保持し、同じブランチ内のインデックスから他のファイルを削除するように命令します。コマンド git reset
を使用して、任意のコミットからファイルを削除できます。このコマンドを -p
オプションとともに使用すると、インデックスと作業ディレクトリの変更を保持し、ファイルをコミットから削除できます。
このコマンドを -u
オプションとともに使用して、インデックスと作業ディレクトリをリセットし、ファイルをコミットに保持することもできます。
特定のコミットからファイルを削除する場合は、-hard
オプションを指定して git reset
コマンドを使用し、HEAD
の後にコミットを指定できます。たとえば、ファイル"README.md"
をコミットテストから削除する場合は、次のコマンドを実行できます。
git reset -hard test
コマンド git reset --hard
は、作業ディレクトリに加えた変更をすべて破棄することに注意してください。一部のファイルを編集して他のファイルを削除した場合、最後のコマンドは、ステージング領域にまだ存在するファイルに加えた変更をすべて削除します。
ただし、ファイルが不要で、ステージング領域から削除して、追跡されていないファイルにしたいとします。その場合、--cached
オプションを指定して git rm
コマンドを使用します。作業ディレクトリからも削除する場合は、そのコマンドの --cached
オプションをスキップします。
$ git rm --cached <file-name>
これで、ファイルの回復プロセスはほぼ完了しました。関係のないファイルがステージング領域から削除され、他のすべての変更がステージングされます。ここで、コマンド git commit
を使用してこれらの変更をブランチにコミットする必要があります。これでコミットが元に戻りましたが、これには不要なファイルは含まれていません。
$ git commit -m "commit message"
Abdul is a software engineer with an architect background and a passion for full-stack web development with eight years of professional experience in analysis, design, development, implementation, performance tuning, and implementation of business applications.
LinkedIn