プロジェクト管理に Git を使用している開発者は、履歴レコードを削除する必要がある状況によく遭遇します。たとえば、機密情報が送信された場合や、法律により特定のコンテンツの削除が義務付けられている場合などです。ただし、Git はすべての変更の記録を保持するように設計されているため、履歴を削除するのは簡単ではありません。この記事では、Git の履歴レコードを削除するのに役立ついくつかの方法を紹介します。
Git コマンドで git replace
および git Push
を使用して、履歴レコードを削除できます。まず、git log
コマンドを使用して履歴を表示します。
$ git log --oneline
これは、現在のブランチ上のすべてのコミット レコードをリストします。それぞれに SHA-1 識別子 (最初の列) とメッセージ (次の列) が付いています。
次に、git replace
コマンドを使用して、現在のブランチを削除するコミットの前にリセットします。たとえば、最後の 3 つのコミット レコードを削除する場合は、次のように使用できます。
$ git reset HEAD~3
これにより、現在のブランチが最初の 3 つのコミット レコードにリセットされ、履歴の最後の 3 つのコミットが削除されます。 。
最後に、git Push -f
コマンドを使用して、リモート ウェアハウスに強制的にプッシュし、履歴を上書きします。これにより、更新を取得する他のユーザーに問題が発生する可能性があるため、権限を持つ全員がこのことを認識していることを確認する必要があります。
$ git push -f
この方法を使用して履歴を削除する場合は、念のため、実行前にコード ベースをバックアップすることをお勧めします。
もう 1 つの強力なツールは、BFG Repo-Cleaner です。これは、Git リポジトリ内の履歴を削除するためにローカルで実行できる Java プログラムです。
まず、BFG Repo-Cleaner をインストールします。 Homebrew を使用して Mac にインストールできます:
$ brew install bfg
または、公式 Web サイトからダウンロードしてコンピュータにインストールします:
$ wget http://search.maven.org/remotecontent?filepath=com/madgag/bfg/1.14.0/bfg-1.14.0.jar
次に、次のコマンドを root ディレクトリで実行します。 Git リポジトリ (コード ベースをバックアップする前に必ず削除してください):
$ java -jar /path/to/bfg.jar --delete-files filename.txt.git $ git reflog expire --expire=now --all && git gc --prune=now --aggressive $ git push
ここで、filename.txt.git
は、削除するコンテンツを含むファイルの名前です (例: .git-credentials
)。ここでは、BFG Repo-Cleaner を使用してコミット履歴、参照、タグを削除し、リポジトリを再圧縮します。
BFG Repo-Cleaner はウェアハウス内のあらゆるコンテンツを削除する可能性があるため、注意して操作する必要があることに注意してください。
最後の方法は、保持したいコミット レコードのみを含む新しい Git リポジトリを作成することです。このアプローチでは、ある程度の手動作業が必要ですが、リポジトリの整合性が維持され、リポジトリに対する他の人の作業には影響しません。
まず、元の Git リポジトリのルート ディレクトリに新しいディレクトリを作成して、新しい Git リポジトリを保存します。
$ mkdir newrepo && cd newrepo
次に、元の Git リポジトリの選択的コミット レコードを新しいディレクトリにコピーします。ディレクトリ内:
$ git clone /path/to/oldrepo --depth 1 $ cd oldrepo && git log --oneline
これにより、元の Git リポジトリの最後のコミット レコードが新しい Git リポジトリにコピーされます。新しいリポジトリのリモート URL を更新し、リモート リポジトリにプッシュします。
$ git remote set-url origin git://new/repo.git $ git push -u origin master
これにより、選択的にコミットされたレコードのみを含む新しい Git リポジトリが作成されます。
概要
Git では、履歴レコードの削除はデリケートな問題であるため、慎重に扱う必要があります。 git replace
コマンドを使用して、最近のコミット レコードをいくつか削除します。 BFG Repo-Cleaner を使用して、特定のファイルまたはフォルダーのコミット履歴を削除します。最後に、必要に応じて、新しい Git リポジトリを作成してコミット レコードを保存できます。いずれの場合も、念のためコードベースを削除する前にバックアップする必要があります。
以上がGit の履歴レコードを削除するのに役立ちますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。