技術ノート Linux Git Reset は実際にどのように機能するのでしょうか?ソフト、ハード、および混合リセットの説明

Git Reset は実際にどのように機能するのでしょうか?ソフト、ハード、および混合リセットの説明

git reset
Git Reset は実際にどのように機能するのでしょうか?ソフト、ハード、および混合リセットの説明

は、Git リポジトリの履歴を変更し、間違いを修正できる強力なコマンドです。ただし、名前を聞くと使用するのが恐ろしいように思えますが、実際には非常に簡単なので、その仕組みについて説明しましょう。

Git HEAD とは何ですか?

Git Reset は実際にどのように機能するのでしょうか?ソフト、ハード、および混合リセットの説明

リセットがどのように機能するかを理解する前に、Git HEAD について説明する必要があります。

Git Reset は実際にどのように機能するのでしょうか?ソフト、ハード、および混合リセットの説明

「HEAD」は、現在作業中の コミット の単なるエイリアスです。これはレコード プレーヤーのヘッドのようなもので、その位置によって使用されるデータが決まります。現在使用している場合は、

 master

ブランチの場合、HEAD はそのブランチの最新のコミットになります。

HEAD はコミットのエイリアスであるにもかかわらず、ほとんどの場合、実際にはコミットを直接指しません。これはブランチを指し、最新のコミットを自動的に使用します。また、「切り離された HEAD」として知られるコミットを直接指すこともできますが、それは問題ではありません。

 git reset

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 Reset は実際にどのように機能するのでしょうか?ソフト、ハード、および混合リセットの説明

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 Reset は実際にどのように機能するのでしょうか?ソフト、ハード、および混合リセットの説明

ハードリセットしたほうがいいですか?

実際にはソフト リセットまたは混合リセットのみを使用する必要がありますが、リポジトリが非常に台無しになり、完全にリセットする必要がある場合は、次の一連のコマンドを使用して完全に通常の状態に戻すことができます。

 git fetch 原点

git チェックアウト マスター

gitリセット –ハードオリジン/マスター

git clean -d –force

もちろん、古典的な「リポジトリを削除して Github から再クローンする」という方法をいつでも実行できますが、この方法は少なくとも Git で承認されており、リセットされるのは 1 つのブランチのみです。

「 Git Reset は実際にどのように機能するのでしょうか?ソフト、ハード、および混合リセットの説明」に関するベスト動画選定!

【Git入門】Git + Github使い方入門講座🐒Gitの仕組みや使い方を完全解説!パーフェクトGit入門!
【わかりやすい!Git操作】初心者向けのGitの基本 〜 30分で入門!