git reset
は、Git リポジトリの履歴を変更し、間違いを修正できる強力なコマンドです。ただし、名前を聞くと使用するのが恐ろしいように思えますが、実際には非常に簡単なので、その仕組みについて説明しましょう。
Git HEAD とは何ですか?
リセットがどのように機能するかを理解する前に、Git HEAD について説明する必要があります。
「HEAD」は、現在作業中の コミット の単なるエイリアスです。これはレコード プレーヤーのヘッドのようなもので、その位置によって使用されるデータが決まります。現在使用している場合は、
master
ブランチの場合、HEAD はそのブランチの最新のコミットになります。
HEAD はコミットのエイリアスであるにもかかわらず、ほとんどの場合、実際にはコミットを直接指しません。これはブランチを指し、最新のコミットを自動的に使用します。また、「切り離された HEAD」として知られるコミットを直接指すこともできますが、それは問題ではありません。
git reset
。
Git リセットはどのように機能しますか?
Git のコミット履歴はコミットのツリーとして保存され、ほとんどの部分が不変であることを目的としています。ただし、場合によってはこの履歴を変更する必要がある場合があります。
git reset
が登場します。
各コミットはその前のコミットにリンクしており、最終的にはマージされて戻ってくるさまざまなリムに分岐することができます。
master
支店。どちらの場合も、HEAD は通常、作業しているブランチの最新のコミットを指します。
では、元に戻したいコミットを行うとどうなるでしょうか?
さて、走っています
git reset
基本的に HEAD を後ろに移動し、その前にあるすべてのコミットをハングしたままにします。これにより、通常は不変の Git 履歴が書き換えられ、HEAD より前のコミットが削除されます。
これはさまざまな理由で非常に役立ちます。おそらく、コミットを行ってから追加の変更を加え、全体を 1 つのコミットとしてプッシュしたいと考えたかもしれません。あなたは出来る
git reset
前のコミットに戻ってから、正しく再コミットしてください。
あるいは、追跡したくない変更を誤ってコミットしてしまったのかもしれません。方法が分からないと、これを理解するのは非常に難しいかもしれません
git reset
は機能しますが、HEAD をリセットし、正しい変更をステージングするだけでこれが実現されます。とは異なりますので注意してください。
git revert
Git には 3 種類のリセットがあり、それらはすべてハングしたままになったコミットを処理する方法に基づいて異なります。これらはすべて Git 履歴を書き換え、HEAD を元に戻しますが、変更の処理方法は異なります。
-
これにより、ファイルが保持され、すべての変更が自動的にステージングされます。git reset --soft -
これにより、変更は完全に破棄され、ローカル ディレクトリから削除されます。自分が何をしようとしているのか理解している場合にのみ、これを使用してください。git reset --hard -
これはデフォルトであり、すべてのファイルを同じに保ちますが、変更のステージングを解除します。これは最も柔軟なオプションですが、名前に反してファイルは変更されません。git reset --mixed
ソフトとミックスの違いは、変化が段階的に行われるかどうかです。 Staged は基本的に、ローカル ディレクトリと Git 履歴の間の中間ゾーンです。
git add
ステージファイル、および
git commit
それらを履歴に書き込みます。どちらの場合も、ローカル ディレクトリは影響を受けず、Git による変更の追跡の状態が変わるだけです。
基本的に、ソフト リセットと混合リセットはほとんど同じであり、変更を保持できます。ハード リセットは、ローカル ディレクトリをコミット時の場所に完全に戻します。
Git リセットの使用
何が起こっているのか理解したら、実際に使用してみる
git reset
信じられないほど簡単です。リセットするには、戻りたいコミットへの参照が必要です。これは実行すると取得できます
reflog
:
git reflog
右側の 7 桁のコードをコピーします。
vim
で行き詰まった場合は、Q を押して、
git config --global core.editor "nano"
を実行してください。
その後、ターゲットのコミットにリセットして戻すことができます。
git restart --mixed a560612
または、HEAD に対する相対的な位置に基づいてコミットをターゲットにすることもできます。次のコマンドは、HEAD の直前のコミットをターゲットとしています。これは、最新のコミットをリセットする必要がある場合に便利な省略表現です。
git restart --mixed HEAD~
Fork のような Git クライアントを使用している場合、リセットは対象のコミットを右クリックして [リセット] を選択するだけで簡単です。
ハードリセットしたほうがいいですか?
実際にはソフト リセットまたは混合リセットのみを使用する必要がありますが、リポジトリが非常に台無しになり、完全にリセットする必要がある場合は、次の一連のコマンドを使用して完全に通常の状態に戻すことができます。
git fetch 原点
git チェックアウト マスター
gitリセット –ハードオリジン/マスター
git clean -d –force
もちろん、古典的な「リポジトリを削除して Github から再クローンする」という方法をいつでも実行できますが、この方法は少なくとも Git で承認されており、リセットされるのは 1 つのブランチのみです。





