17.ブランチからコミットを削除する
目標
- ブランチの最新のコミットを削除する方法を学ぶ
Revert
は、リポジトリへのコミットをキャンセルできる前のセクションの強力なコマンドです。ただし、元のコミットとキャンセルされたコミットの両方が履歴に表示されます。ブランチの(git log
コマンドを使用する場合)
コミットがすでに行われた後、それが間違いであることに気付くことがよくあります。誤ったコミットをすぐに削除できるundoコマンド。このコマンドは、git log
履歴に1つ以上の不要なコミットが表示されないようにします。
01リセットコマンド
すでにreset
コマンドを使用して、バッファゾーンと選択したコミットを照合しました(前のレッスンではHEADコミットを使用しました)。
コミット参照(つまり、ブランチ、ハッシュ、またはタグ名)が指定されている場合、reset
コマンドは…
- 現在のブランチを上書きして、正しいコミットを指すようにします
- オプションで、指定されたコミットに準拠するようにバッファーゾーンをリセットします
- オプションで、指定したコミットと一致するように作業ディレクトリをリセットします
02履歴を確認します
コミット履歴を簡単にスキャンします。
実行:
git hist
結果:
このブランチの最後の2つのコミットは「おっと「」と「おっと元に戻す」。 reset
コマンドでそれらを削除しましょう。
03このブランチを最初にマークします
最後のコミットをtag, so you can find it after removing a commit(s).
実行:
git tag oops
04前のOopsへのコミットをリセット
In上記の履歴ログでは、「v1」とタグ付けされたコミットは、「Oops」および「RevertOops」のコミットの前にあります。ブランチをそのポイントにリセットしましょう。ブランチにはタグがあるため、resetコマンドでタグ名を使用できます(タグがない場合は、ハッシュ値を使用できます)。
実行:
git reset --hard v1git hist
結果:
マスターブランチがコミットv1を指しており、「RevertOops」および「Oops」コミットがブランチに存在しなくなりました。 --hard
パラメータは、作業ディレクトリに新しいブランチヘッドを反映させます。
05何も失われません
間違ったコミットはどうなりましたか?それらはまだリポジトリにあります。実際、私たちはまだそれらを参照することができます。レッスンの開始時に、キャンセルされたコミットの「oops」タグを作成しました。すべてのコミットを見てみましょう。
実行:
git hist --all
結果:
わかります間違ったコミットはなくなりません。それらはマスターブランチにリストされなくなりましたが、リポジトリには残ります。タグを付けなかった場合でもリポジトリに残りますが、ハッシュ名でのみ参照できます。参照されていないコミットは、ガベージコレクションソフトウェアがシステムによって実行されるまでリポジトリに残ります。
06リセットの危険性
ローカルブランチでのリセットは通常、無害です。 「事故」の結果は、適切なコミットを使用することで元に戻すことができます。
ただし、ブランチがリモートリポジトリで共有されている場合、ブランチを共有している他のユーザーが混乱する可能性があります。