17.ブランチからコミットを削除する

目標

  • ブランチの最新のコミットを削除する方法を学ぶ

Revertは、リポジトリへのコミットをキャンセルできる前のセクションの強力なコマンドです。ただし、元のコミットとキャンセルされたコミットの両方が履歴に表示されます。ブランチの(git logコマンドを使用する場合)

コミットがすでに行われた後、それが間違いであることに気付くことがよくあります。誤ったコミットをすぐに削除できるundoコマンド。このコマンドは、git log履歴に1つ以上の不要なコミットが表示されないようにします。

01リセットコマンド

すでにresetコマンドを使用して、バッファゾーンと選択したコミットを照合しました(前のレッスンではHEADコミットを使用しました)。

コミット参照(つまり、ブランチ、ハッシュ、またはタグ名)が指定されている場合、resetコマンドは…

  1. 現在のブランチを上書きして、正しいコミットを指すようにします
  2. オプションで、指定されたコミットに準拠するようにバッファーゾーンをリセットします
  3. オプションで、指定したコミットと一致するように作業ディレクトリをリセットします

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リセットの危険性

ローカルブランチでのリセットは通常、無害です。 「事故」の結果は、適切なコミットを使用することで元に戻すことができます。

ただし、ブランチがリモートリポジトリで共有されている場合、ブランチを共有している他のユーザーが混乱する可能性があります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です