驚いたことに、3種類の
git resetについて明確に書かれた投稿がハブラ全体に1つもありません。 たとえば、クエリ「git reset」の
2番目に関連性の高い記事では、著者は「このアクションには、ソフト(ソフトリセット)とハード(ハードリセット)の2種類があります」と書いています。 デフォルトで使用される
--mixedモードは、何らかの理由で言及する
--mixedがありませんでした。
このチームの仕事に対する誤解をしばしば目にすることは驚くことではありません。 カットの下で、残ってはならない曖昧さのトピックを読んだ後、3つの
git resetモードすべてについて簡潔かつ明確に説明します。
リポジトリに加えられた変更は、デフォルトではステージングされていません。 それらをコミットするには、まず
git add実行してインデックスに変更を追加する必要があります。
git commitを実行すると、インデックスにあったもののみがリポジトリにコミットされます。
git reset --soft
ブランチを例に取ります:
- A - B - C (master)HEADは
Cを指し、インデックスは
Cと一致します
。やった後
git reset --soft B
HEADは
Bを指し、コミット
Cからの変更は、
git addコマンドで追加したかのようにインデックスに反映されます。
git commitを実行すると、
Cと完全に同一のコミットを受け取ります
。git reset --mixed(デフォルト)
--mixedデフォルトで
--mixedモード
--mixed使用されます。
git reset --mixed = git reset同じ初期条件に戻りましょう。
- A - B - C (master)完了することにより
git reset --mixed B
または
git reset B
HEADは再び
Bを指しますが、今回は
Cからの変更はインデックスに含まれません。ここで
git commitを実行すると、何も起こりません。 インデックスには何もありません。
Cからのすべての変更がありますが、
git statusを実行すると、すべての変更がステージングされていないことがわかります。 それらをコミットするには、最初に
git addコマンドでインデックスに追加し、次に
git commitを追加する必要があります。
git reset --hard
同じ初期条件:
- A - B - C (master)--hardような最後の
--hardモードは、
HEADを
Bに移動してインデックスをクリアしますが、--
--mixedとは異なり
--mixedハードリセット
は作業ディレクトリ内のファイルを変更します 。 実行する場合
git reset --hard B
Cからの変更とコミットされていない変更は削除され、リポジトリ内のファイルは
Bと一致します
。 このモードは変更が失われることを意味するため、ハードリセットを実行する前に、
常に git statusチェックして、コミットされていない変更がないことを確認する必要があります(またはそれらは不要です)。
git resetモードの比較表:
| インデックスを変更します | ファイルを変更する 作業ディレクトリ内 | する必要があります 気配りのある |
|---|
reset --soft | いや | いや | いや |
reset [--mixed] | はい | いや | いや |
reset --hard | はい | はい | はい |
そして最後に、写真:(thx to
VBauer )
