git resetコマンドの3つのモード:--soft、-mixed(デフォルト)、-hard

驚いたことに、3種類のgit resetについて明確に書かれた投稿がハブラ全体に1つもありません。 たとえば、クエリ「git reset」の2番目に関連性の高い記事では、著者は「このアクションには、ソフト(ソフトリセット)とハード(ハー​​ドリセット)の2種類があります」と書いています。 デフォルトで使用される--mixedモードは、何らかの理由で言及する--mixedがありませんでした。

このチームの仕事に対する誤解をしばしば目にすることは驚くことではありません。 カットの下で、残ってはならない曖昧さのトピックを読んだ後、3つのgit resetモードすべてについて簡潔かつ明確に説明します。

リポジトリに加えられた変更は、デフォルトではステージングされていません。 それらをコミットするには、まずgit add実行してインデックスに変更を追加する必要があります。 git commitを実行すると、インデックスにあったもののみがリポジトリにコミットされます。

git reset --soft


ブランチを例に取ります:
- A - B - C (master)
HEADCを指し、インデックスはCと一致します

やった後
 git reset --soft B 
HEADBを指し、コミット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モードは、 HEADBに移動してインデックスをクリアしますが、-- --mixedとは異なり--mixedハードリセットは作業ディレクトリ内のファイルを変更します 。 実行する場合
 git reset --hard B 
Cからの変更とコミットされていない変更は削除され、リポジトリ内のファイルはBと一致します このモードは変更が失われることを意味するため、ハードリセットを実行する前に、 常に git statusチェックして、コミットされていない変更がないことを確認する必要があります(またはそれらは不要です)。

git resetモードの比較表:
インデックスを変更しますファイルを変更する
作業ディレクトリ内
する必要があります
気配りのある
reset --softいやいやいや
reset [--mixed]はいいやいや
reset --hardはいはいはい

そして最後に、写真:(thx to VBauer

画像

Source: https://habr.com/ru/post/J203282/


All Articles