Gitを使用して作業する際に、Gitのコミットでエラーや問題に遭遇しましたか?おそらく、誤って秘密情報や機密データが保存されてしまったかもしれません。幸いなことに、Gitを使用してファイルを処理し、コミットから削除し、履歴を修正することができます。
複数のコミットを行ったり、既存のコミット履歴があるリポジトリをクローンした場合、通常は過去を見返してどのようなコミットが行われたかを確認したいと思うでしょう。このチュートリアルでは、Gitの履歴からエントリを削除する方法を学びます。
続けて読んで、Gitで問題を解決しましょう!
前提条件
このチュートリアルでは、ステップバイステップの手順を使用します。一緒に進める場合は、以下の準備が整っていることを確認してください:
- A local machine to test the Git commands – This tutorial uses Windows 10, but later versions will also work.
- Git Bash – このチュートリアルではGit Bash 2.36を使用します。
Gitコミットからファイルを削除する
Gitをチームで使用する場合、1日に何百ものコミットを行います。その結果、誤ったファイルや複数のファイルを元に戻す必要がある場合があります。この要求は通常、コードや設定の変更により問題が発生します。
この問題を解決するには、Gitコマンドを実行してファイルまたは複数のファイルをGitコミットから削除する必要があります。Git Bashツールの中でも、よく使われるツールの1つを使用して、Gitコミットから単一のファイルを削除します。
1. WindowsマシンでGit Bashツールを開いてください。
2. 次に、以下のコマンドを実行してリポジトリフォルダを作成し、そのフォルダに移動してください。これらのコマンドはターミナルに出力されませんが、必ず~/Desktop/Repository/repo1をお好みのフォルダパスと名前に置き換えてください。
3. 以下のコマンドを実行してリポジトリを初期化し、test1.txtとtest2.txtという名前の2つのテキストファイルを作成してください。

4. 以下のコマンドを実行してGitコミットのステータスを確認してください。
コマンドを実行すると、コミットが未追跡でまだコミットされていないことがわかります。

5. git addコマンドを実行して、ステップ3で作成した2つのテキストファイル(test_file1.txtとtest_file2.txt)をローカルリポジトリに追加してください。
このコマンドは出力されませんが、ファイルをリモートリポジトリにプッシュせずに追加します。
6. 次に、以下のgit commitコマンドを実行して、Gitがローカルリポジトリでの進捗と変更を追跡するようにしてください。

7. コミット後、以下のコマンドを実行して特定のファイル(test_file2.txt)をGitコミットから削除します。

8. 最後に、以下のgit statusコマンドを再実行してリポジトリのステータスを確認します。
以下のように、ファイルはステージングエリア(Gitコミット)から削除され、ファイル(test_file2.txt)がUntracked filesの下に表示されていることがわかります。

最近コミットされたすべてのファイルを削除する
特定のファイルをGitコミットから削除する方法を学びました。ただし、通常は複数のファイルを削除する必要があり、Gitはそのタスクに対応しています。git resetコマンドは、リポジトリの変更を元に戻すための複雑でありながら汎用性のあるツールです。
git resetの動作を確認するには、いくつかのファイルをコミットし、その後変更を元に戻してGitコミットに保存された最近コミットされたファイルを削除します。
1. test_file3.txtとtest_file4.txt iを~/Desktop/Repository/repo1フォルダに新しく作成します。
2. 次に、以下のgit addコマンドを実行します。このコマンドは出力を提供しませんが、新しいテキストファイルをローカルリポジトリ(~/Desktop/Repository/repo1)に追加します。
3. ファイルをコミットするために以下のgit commitコマンドを実行します。これにより、Gitはリポジトリで行った進捗と変更を追跡します。

4. 以下のコマンドを実行して、ローカルリポジトリの状態を確認してください。
以下のように、出力にはコミットするものがないことを示すメッセージが表示され、リポジトリにすべてが配置されていることがわかります。

5. 次に、以下のgit resetコマンドを実行して、ステップ3で最近作成されたコミットを元に戻します。このコマンドは出力を提供しませんが、ファイルtest_file3.txtとtest_file4.txtを削除します。
また、git reset –soft HEAD^を使用して、これまでにコミットされたすべてのファイルを削除することもできます。
6. 次に、以下のgit statusコマンドを再実行して、リポジトリの状態を確認します。
以下の出力には、コミットする必要があるtest_file3.txtとtest_file4.txtのファイルが表示されます。この出力は、Gitコミットから削除するファイルを示しています。

Git履歴から特定のコミットを削除する
すべてのコミットされたファイルを削除することは、クリーンな状態から始める場合にはうまく機能します。しかし、特定のコミットを削除する必要がある場合はどうすればよいでしょうか?git revertコマンドは、コミットのIDを知っていれば、そのトリックを行います。
「最近コミットされたすべてのファイルを削除する」セクションの最後のステップで、コミットがコミットされていないことに気付いたら、変更をコミットして、git revert
コマンドを実行してみてください。
最新の変更をローカルリポジトリにコミットするには、以下のgit commit
コマンドを実行してください。
コマンドを実行した後、両方のテキストファイルが再度コミットされ、コミットIDが0315b85であることに気づくでしょう。以下に示すように。

次に、前の手順で行ったコミットを元に戻すためにgit revert
コマンドを実行します。必ずコミットのIDを0315b85
に置き換えてください。
以下に、最近コミットした2つのファイルが削除されています。

Gitのコミット履歴からディレクトリを削除する
今点で、すでにコミットしたファイルを削除する方法を知っていますが、ディレクトリはどうでしょうか?Gitのコミットからディレクトリを削除する方法は、ファイルを削除するのと似ています。
1. 以下のコマンドを実行します。出力は提供されませんが、以下の操作を実行します:
- ローカルリポジトリ(~/Desktop/Repository/repo1)内に
myfolder
という名前のフォルダを作成します。
- ~/Desktop/Repository/repo1/myfolderフォルダ内にl.txtという名前のファイルを作成します。
2. 次に、以下のgitコマンドを実行して、新しいフォルダ(~/Desktop/Repository/repo1/myfolder)をローカルリポジトリに追加します。

3. 以下のgit rmコマンドを実行して、ステップ2でコミットしたフォルダ(myfolder)を削除します。

4. 最後に、git statusコマンドを実行してリポジトリのステータスを確認し、フォルダが削除されたかどうかを確認します。
以下に、整ったフォルダ(myfolder)とその中のl.txtファイルが正常に削除されているのが見えます。

結論
このチュートリアルでは、特定のコミット、ファイル、または複数のファイルを削除するなど、Gitコミットの操作方法を学びました。
また、ローカルリポジトリ内の整个のフォルダを削除し、変更をコミットする方法にも触れました。
これで、リポジトリで変更を自信を持ってコミットし、必要ないコミットを削除できるようになりました。あなたのチームでコミットを扱うためにどの方法が最適だと思いますか?
Source:
https://adamtheautomator.com/git-and-remove-from-commit/