ファイルとプロジェクトを以前の状態に復元またはロールバックする方法を学習しようとしていますが、git revert
、checkout
、およびreset
の違いを理解していません。どうやら同じ目的のために3つの異なるコマンドがあるのはなぜですか?誰かがいつ他のコマンドを選択する必要がありますか?
これら3つのコマンドの目的はまったく異なります。それらは、リモートでも似ていません。
git revert
このコマンドは、以前のコミットからの変更を取り消す新しいコミットを作成します。このコマンドは、プロジェクトに新しい履歴を追加します(既存の履歴を変更しません)。
git checkout
このコマンドは、リポジトリからコンテンツをチェックアウトし、作業ツリーに配置します。コマンドの起動方法に応じて、他の効果もあります。たとえば、現在作業しているブランチを変更することもできます。このコマンドは、履歴を変更しません。
git reset
このコマンドはもう少し複雑です。実際には、起動方法に応じていくつかの異なる処理を実行します。インデックス(いわゆる「ステージング領域」)を変更します。または、ブランチヘッドが現在指しているコミットを変更します。このコマンドは、既存の履歴を変更する場合があります(ブランチが参照するコミットを変更することにより)。
プロジェクトの履歴のどこかでコミットが行われ、後でコミットが間違っていて、実行すべきではないと判断した場合、git revert
がジョブのツールです。不正なコミットによって導入された変更を取り消し、履歴に「取り消し」を記録します。
作業ツリーのファイルを変更したが、変更をコミットしていない場合は、git checkout
を使用して、ファイルのリポジトリからの新しいコピーをチェックアウトできます。
コミットを行ったが、他の人と共有しておらず、それを望まないことに決めた場合、git reset
を使用して履歴を書き換えて、そのコミットを行ったことがないように見えるようにすることができます。 。
これらは、可能な使用シナリオのほんの一部です。いくつかの状況で役立つ他のコマンドがあり、上記の3つのコマンドには他の用途もあります。
git revert
は、以前のコミットを取り消すために使用されます。 gitでは、以前のコミットを変更または消去することはできません。 (実際にはできますが、問題が発生する可能性があります。)そのため、以前のコミットを編集する代わりに、revertは以前のコミットを元に戻す新しいコミットを導入します。git reset
は、まだコミットされていない作業ディレクトリの変更を元に戻すために使用されます。git checkout
は、他のコミットから現在の作業ツリーにファイルをコピーするために使用されます。ファイルは自動的にコミットされません。コミットがあったとしましょう:
C
B
A
git revert B
は、B
の変更を取り消すコミットを作成します。
git revert A
は、A
の変更を取り消すコミットを作成しますが、B
の変更は変更しません。
B
の変更がA
の変更に依存している場合、A
の復帰は不可能であることに注意してください。
git reset --soft A
は、コミット履歴とリポジトリを変更します。ステージングディレクトリと作業ディレクトリは、C
の状態のままです。
git reset --mixed A
は、コミット履歴、リポジトリ、およびステージングを変更します。作業ディレクトリは引き続きC
の状態になります。
git reset --hard A
は、コミット履歴、リポジトリ、ステージング、作業ディレクトリを変更します。 A
の状態に完全に戻ります。
git checkout
は作業ツリーを変更し、git reset
は、あなたがポイントしているブランチを参照するものを変更します。git revert
は、変更を取り消すコミットを追加します。Reset-コミットレベルでは、リセットはブランチの先端を別のコミットに移動する方法です。これは、現在のブランチからコミットを削除するために使用できます。
元に戻す-元に戻すと、新しいコミットを作成してコミットが元に戻ります。これは、コミット履歴を書き換える機会がないため、変更を元に戻す安全な方法です。これとは対照的に、git resetは既存のコミット履歴を変更します。このため、パブリックブランチの変更を元に戻すにはgit revertを使用し、プライベートブランチの変更を元に戻すためにgit resetを予約する必要があります。
このリンクを見ることができます- リセット、チェックアウト、復帰
ツリーを壊したがコードをコミットしなかった場合は、git reset
を使用できます。また、1つのファイルを復元したい場合は、git checkout
を使用できます。
ツリーを壊してコードをコミットした場合、git revert HEAD
を使用できます。
http://book.git-scm.com/4_undoing_in_git_-_reset,_checkout_and_revert.html