Git Revert、Checkout、Resetの違いは何ですか?
-
27-10-2019 - |
質問
ファイルやプロジェクトを復元またはロールバックする方法を以前の状態にしようとしていますが、間の違いを理解していません git revert
, checkout
, 、 と reset
. 。一見同じ目的のために3つの異なるコマンドがあるのはなぜですか?
解決
これらの3つのコマンドには、まったく異なる目的があります。それらはリモートでも似ていません。
git revert
このコマンドは、以前のコミットからの変更を取り消す新しいコミットを作成します。このコマンドは、プロジェクトに新しい履歴を追加します(既存の履歴を変更しません)。
git checkout
このコマンドは、リポジトリからコンテンツをチェックアウトし、ワークツリーに入れます。また、コマンドがどのように呼び出されたかに応じて、他の効果も発生する可能性があります。たとえば、現在取り組んでいるブランチを変更することもできます。このコマンドは、歴史に変更を加えません。
git reset
このコマンドはもう少し複雑です。実際には、呼び出された方法に応じて、いくつかの異なることを行います。インデックス(いわゆる「ステージング領域」)を変更します。または、ブランチヘッドが現在指していることをコミットする変更。このコマンドは、既存の履歴を変更する場合があります(ブランチが参照するコミットを変更することにより)。
これらのコマンドを使用します
プロジェクトの歴史のどこかにコミットが行われ、後でコミットが間違っていて、行われるべきではないと判断した場合、 git revert
仕事のためのツールです。悪いコミットによって導入された変更を取り消し、歴史の「元に戻す」ことを記録します。
作業ツリーのファイルを変更したが、変更をコミットしていない場合は、使用できます git checkout
ファイルの新鮮なレポジトリコピーをチェックアウトします。
あなたがコミットしたが、それを他の人と共有していない場合、あなたがそれを望んでいないと判断した場合、あなたは使用できます git reset
あなたがそのコミットを決してしなかったように見えるように、歴史を書き直すために。
これらは、可能な使用可能なシナリオのほんの一部です。状況によっては役立つ他のコマンドがあり、上記の3つのコマンドには他の用途もあります。
他のヒント
git revert
以前のコミットを元に戻すために使用されます。 Gitでは、以前のコミットを変更または消去することはできません。 (実際にはできますが、問題を引き起こす可能性があります。)以前のコミットを編集する代わりに、元のコミットを逆転させる新しいコミットを導入します。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
取り消しの変更を追加します。
リセット - コミットレベルでは、リセットは、ブランチの先端を別のコミットに移動する方法です。これは、現在の支店からコミットを削除するために使用できます。
復帰 -戻ることは、新しいコミットを作成することでコミットを元に戻します。これは、コミット履歴を書き直す機会がないため、変更を取り消す安全な方法です。これを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