Git で日を救い、コミット履歴から削除

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をお好みのフォルダパスと名前に置き換えてください。

# リポジトリフォルダとrepo1サブフォルダを作成
mkdir -p ~/Desktop/Repository/repo1
# 作業ディレクトリをrepo1に変更
cd ~/Desktop/Repository/repo1

3. 以下のコマンドを実行してリポジトリを初期化し、test1.txttest2.txtという名前の2つのテキストファイルを作成してください。

# ローカルリポジトリを初期化(.git隠しフォルダが作成されます)
git init
# 二つのテキストファイルを作成
touch test_file1.txt test_file2.txt
Initializes the local repository

4. 以下のコマンドを実行してGitコミットのステータスを確認してください。

git status

コマンドを実行すると、コミットが未追跡でまだコミットされていないことがわかります。

Checking the status of Git commits on the Git terminal

5. git addコマンドを実行して、ステップ3で作成した2つのテキストファイル(test_file1.txttest_file2.txt)をローカルリポジトリに追加してください。

このコマンドは出力されませんが、ファイルをリモートリポジトリにプッシュせずに追加します。

git add .

6. 次に、以下のgit commitコマンドを実行して、Gitがローカルリポジトリでの進捗と変更を追跡するようにしてください。

git commit -m "Adding two new files test_file1.txt and text_file2.txt"
Committing Changes to Repository

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

git rm --cached test_file2.txt
Removing a Specific File from the Git Commit

8. 最後に、以下のgit statusコマンドを再実行してリポジトリのステータスを確認します。

git status

以下のように、ファイルはステージングエリア(Gitコミット)から削除され、ファイル(test_file2.txt)がUntracked filesの下に表示されていることがわかります。

Verifying the Removed Git Commit (test_file2.txt)

最近コミットされたすべてのファイルを削除する

特定のファイルをGitコミットから削除する方法を学びました。ただし、通常は複数のファイルを削除する必要があり、Gitはそのタスクに対応しています。git resetコマンドは、リポジトリの変更を元に戻すための複雑でありながら汎用性のあるツールです。

git resetの動作を確認するには、いくつかのファイルをコミットし、その後変更を元に戻してGitコミットに保存された最近コミットされたファイルを削除します。

1. test_file3.txttest_file4.txt i~/Desktop/Repository/repo1フォルダに新しく作成します。

touch test_file3.txt test_file4.txt

2. 次に、以下のgit addコマンドを実行します。このコマンドは出力を提供しませんが、新しいテキストファイルをローカルリポジトリ(~/Desktop/Repository/repo1)に追加します。

git add .

3. ファイルをコミットするために以下のgit commitコマンドを実行します。これにより、Gitはリポジトリで行った進捗と変更を追跡します。

git commit -m "Adding two more files"
Committing Changes to the Repository

4. 以下のコマンドを実行して、ローカルリポジトリの状態を確認してください。

git status

以下のように、出力にはコミットするものがないことを示すメッセージが表示され、リポジトリにすべてが配置されていることがわかります。

Checking the Status of Git Commits

5. 次に、以下のgit resetコマンドを実行して、ステップ3で最近作成されたコミットを元に戻します。このコマンドは出力を提供しませんが、ファイルtest_file3.txttest_file4.txtを削除します。

git reset --soft HEAD~1

また、git reset –soft HEAD^を使用して、これまでにコミットされたすべてのファイルを削除することもできます。

6. 次に、以下のgit statusコマンドを再実行して、リポジトリの状態を確認します。

git status

以下の出力には、コミットする必要があるtest_file3.txtとtest_file4.txtのファイルが表示されます。この出力は、Gitコミットから削除するファイルを示しています。

Verifying the Recent Commits were Removed

Git履歴から特定のコミットを削除する

すべてのコミットされたファイルを削除することは、クリーンな状態から始める場合にはうまく機能します。しかし、特定のコミットを削除する必要がある場合はどうすればよいでしょうか?git revertコマンドは、コミットのIDを知っていれば、そのトリックを行います。

「最近コミットされたすべてのファイルを削除する」セクションの最後のステップで、コミットがコミットされていないことに気付いたら、変更をコミットして、git revertコマンドを実行してみてください。

最新の変更をローカルリポジトリにコミットするには、以下のgit commitコマンドを実行してください。

git commit -m "Hello, I am committing those two files again"

コマンドを実行した後、両方のテキストファイルが再度コミットされ、コミットIDが0315b85であることに気づくでしょう。以下に示すように。

Committing the Changes in the Local Repository

次に、前の手順で行ったコミットを元に戻すためにgit revertコマンドを実行します。必ずコミットのIDを0315b85に置き換えてください。

git revert 0315b85

以下に、最近コミットした2つのファイルが削除されています。

Reverting the Changes in the Local Repository

Gitのコミット履歴からディレクトリを削除する

今点で、すでにコミットしたファイルを削除する方法を知っていますが、ディレクトリはどうでしょうか?Gitのコミットからディレクトリを削除する方法は、ファイルを削除するのと似ています。

1. 以下のコマンドを実行します。出力は提供されませんが、以下の操作を実行します:

  • ローカルリポジトリ(~/Desktop/Repository/repo1)内にmyfolderという名前のフォルダを作成します。
  • ~/Desktop/Repository/repo1/myfolderフォルダ内にl.txtという名前のファイルを作成します。
mkdir myfolder && touch myfolder/l.txt

2. 次に、以下のgitコマンドを実行して、新しいフォルダ(~/Desktop/Repository/repo1/myfolder)をローカルリポジトリに追加します。

git add .
git commit -m "Adding folder"
Adding the new folder (folder) to the Local Repository

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

git rm -r myfolder/
Removing the New Folder (folder) in Git Commit

4. 最後に、git statusコマンドを実行してリポジトリのステータスを確認し、フォルダが削除されたかどうかを確認します。

git status

以下に、整ったフォルダ(myfolder)とその中のl.txtファイルが正常に削除されているのが見えます。

Verifying the Folder (myfolder) Has Been Removed Successfully

結論

このチュートリアルでは、特定のコミット、ファイル、または複数のファイルを削除するなど、Gitコミットの操作方法を学びました。

また、ローカルリポジトリ内の整个のフォルダを削除し、変更をコミットする方法にも触れました。

これで、リポジトリで変更を自信を持ってコミットし、必要ないコミットを削除できるようになりました。あなたのチームでコミットを扱うためにどの方法が最適だと思いますか?

Source:
https://adamtheautomator.com/git-and-remove-from-commit/