1. ホーム
  2. git

[解決済み] Git Revert、Checkout、Resetの違いは何ですか?

2022-03-17 13:13:05

質問

ファイルやプロジェクトを以前の状態に復元またはロールバックする方法を学ぼうとしているのですが、以下の違いがわかりません。 git revert , checkout および reset . 一見同じような目的で3つの異なるコマンドがあるのはなぜか、また、どのような場合にどちらかを選択すべきなのか。

どのように解決するのですか?

この3つのコマンドは全く異なる目的を持っています。似て非なるものなのです。

git revert

このコマンドは、以前のコミットからの変更を取り消す新しいコミットを作成します。このコマンドはプロジェクトに新しい履歴を追加します(既存の履歴は変更しません)。

git checkout

このコマンドは、リポジトリからコンテンツをチェックアウトし、作業ツリーに配置します。また、このコマンドの起動方法によっては、他の効果も期待できます。例えば、現在作業しているブランチを変更することもできます。このコマンドは履歴を変更することはありません。

git reset

このコマンドは少し複雑です。実際には、起動の仕方によっていくつかの異なることをします。インデックスを変更します(いわゆる "ステージングエリア")。あるいは、ブランチヘッドが現在どのコミットを指しているかを変更します。このコマンドは既存の履歴を変更する可能性があります(ブランチが参照するコミットを変更することで)。

これらのコマンドを使用する

プロジェクトの歴史のどこかでコミットが行われ、後でそのコミットが間違っていて、行われるべきではなかったと判断した場合、次のようにします。 git revert はこの仕事のためのツールです。これは間違ったコミットによってもたらされた変更を取り消し、履歴に "undo"を記録します。

作業ツリー内のファイルを変更したが、その変更をコミットしていない場合、そのファイルに対して git checkout を使用して、レポジトリからの新しいコピーをチェックアウトします。

コミットを行ったものの、まだ誰にもそれを公開していない場合、そしてそれが不要だと判断した場合。 git reset を使用すると、そのコミットを行わなかったかのように履歴を書き換えることができます。

これらは、考えられる使用シナリオの一部に過ぎません。他にも状況によっては便利なコマンドがありますし、上記の3つのコマンドは他の使い方もあります。