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



画像







All Articles