Git 履歴からコミットを削除

Abdul Jabbar 2023年6月20日
  1. Git でローカルに変更を削除する
  2. Git で強制的に変更を削除する
Git 履歴からコミットを削除

Git では、機密事項をリポジトリに追加することは良い考えではありません。すべての秘密が台無しになり、望ましくない全世界に公開されるからです。 しかし、意図的または意図せずに、必要のないものを追加することがあります。

ここで、問題を整理し、Git コマンドを使用してリポジトリから機密情報を削除する必要があります。 Git にはリポジトリの履歴をさまざまな形式で保持するためのより実質的な背景があるため、Git の履歴からそれを削除するのは簡単ではありません。

この目的のために、この失敗を徹底的に掃除し、そのリポジトリのブランチから余分なものを削除することにもっと注意を払う必要があります。

Git には、コミットの状態とサイズに応じて、コミットを元に戻すためのさまざまなツールがあります。 削除は 2つの異なる方法で実行できます。失敗したことと、変更をリモート リポジトリにプッシュしたかどうかに応じて異なります。

このチュートリアルでは、Git コマンドを使用してローカルで強制的にコミットを削除する 2つの異なる方法について学習します。

Git でローカルに変更を削除する

最新のコミットを削除

コマンドgit resetを使用して、最新のコミットを削除できます。 このコマンドは、変更を元に戻すことでよく知られています。

ただし、次の Git コマンドを使用して最新のものを削除できます。

git reset --hard HEAD~1

HEAD~1 は、HEAD の前に 1つのコミットを指定します。 コマンド git reset で指定されたコミットを削除するには、フラグ HEAD~N を使用します。

git reset --hard HEAD~N

別の方法では、正確なコミット ハッシュ ID を指定することでこれを実現できます。 次のコマンドはそれを行う方法です。

git reset --hard <sha1-commit-hash>

中間コミットを元に戻す

コマンドgit revertの助けを借りて、特定の中間コミットによって行われた変更を元に戻す新しいコミットを挿入できます。 これは、次の Git コマンドによって実行されます。

git revert <sha1-commit-hash>

ここで重要なのは、git revert は特定の中間コミットを削除しないということです。 履歴から完全に削除するには、git rebase をインタラクティブな引数とともに実行する必要があります。これは次のとおりです。

git rebase -i <sha1-commit-hash>

削除されたコミットを回復する

コミットを削除した後、再度戻したい場合は、次のコマンドを使用して復元できます。

git reflog

Git で強制的に変更を削除する

チームメイトまたは私たちがすでに変更をリモート リポジトリにプッシュしている場合、Git にはコマンド git push とフラグ --force を実行することで、この状況をスムーズに制御する方法があります。

これにより、origin であるデフォルトのリモート リポジトリからコミットが削除され、将来の使用のためにブランチで利用できるようになります。

git push origin HEAD --force

ノート:

この方法は安全ではなく、使用に関して非常に重要です。 同僚のローカルリポジトリが台無しになる可能性があります。 私たちのチームの誰かがこのブランチをプルした場合、それは彼らの作業にマージされ、このブランチは再びプッシュバックされます。

そのため、同じリポジトリ内の新しいブランチから開始する方が便利です。

著者: Abdul Jabbar
Abdul Jabbar avatar Abdul Jabbar avatar

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