1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【図解】初心者にもわかる git checkout / revert / restore / reset の違い

Last updated at Posted at 2025-06-21

◼️ はじめに

こんにちは.

突然ですが,git 使いこなせていますか?

「とりあえず commit して履歴を積み重ねているだけ…」という方も多いのではないでしょうか.

Git には,過去のコミットを「参照」したり「巻き戻し」たりするための便利なコマンドがいくつか用意されています.しかし,それぞれの動作や違いが少しわかりづらく,混乱しやすいポイントでもあります.

そこで今回は,revertcheckoutrestorereset の4つのコマンドについて,図を用いながら視覚的に整理し,ざっくりと概要をつかめるように解説してみたいと思います!

私自身も最近学び始めたばかりのため,一部に誤りや不正確な説明が含まれている可能性があります.

本記事では「ざっくり理解する」ことを目的としており,細かい仕組み(ステージングエリアやワークツリーなど)の説明は省略しています.

◼️ 4つのコマンドのイメージ

◻️ git checkout

まずは,git checkout コマンドです.

一言で言えば,「過去のコミットの状態に一時的に切り替える」ために使います.

(※ 以前はブランチの切り替えやファイル単位の操作などにも使われていましたが、現在は git switchgit restore にその役割が分割されました)

checkout は過去のコミットを「編集する」のではなく,「どんな状態だったか確認したい」ときに使用するコマンドです.

下の図を使ってもう少し具体的に説明します.

git-ckeckout2.png

上段が checkout 前(before),下段が checkout 後(after)の状態です.

例えば現在,最新コミット D にいるとします.そのとき,2つ前のコミット B の状態を確認したくなったとしましょう.

その場合,次のように checkout コマンドを使うと…

$ git checkout B  # BはコミットID

コミット B の状態に切り替わります.このとき,HEAD も B を指すようになります(図では赤色で表現).

元いた D に戻りたくなった場合は,以下のコマンドで直前の状態に戻せます:

$ git checkout -

◻️ git revert

次は,git revert コマンドです.

簡単にいうと,「特定のコミットの変更内容を打ち消すような新しいコミットを作成する」コマンドです.

下の図を使って説明します.

スライド2.png

図の上段(before)では,現在のHEADはコミットDを指しています.

この状態で,過去のコミットCの内容を取り消したいとしましょう.

このときに git revert を使うと,Dの後ろに「Cの変更を打ち消す」新たなコミット(ここでは "revert of C")が作成されます.

つまり,Dの内容はそのままで,Cで行った変更のみが取り消されます.

具体例を使って説明します.

  1. Bの変更:fooを追加

    + foo
    
  2. Cの変更:barを追加

      foo
    + bar
    
  3. Dの変更:hogeを追加

      foo
      bar
    + hoge
    
  4. Dの変更( hoge )は残したままで,Cの変更( bar )を消したい場合:

    $ git revert C  # CはコミットID
    

    すると以下のような状態になります:

      foo
    - bar
      hoge
    

こんな感じです.

◻️ git restore

次は,git restore です.

一言で言うと,「コミット履歴を壊さずに、過去のある時点の状態に戻す」ためのコマンドです.

図を使って説明します.

git-restore2.png

図の上段(before)では,現在のHEADはDを指しています.

ここで「やっぱりCの状態に戻したい」と思ったとしましょう.ただし,Dのコミットは削除せずにログとして残したいという状況です.

そこで git restore を使うと,現在のブランチやHEADの位置はそのままで,中身をCの状態に戻すことができます.

restore後は,まだコミットされてないのでHEADはDのままで,中身はCを複製してきた状態になっています.)

◻️ git reset

最後は,git reset コマンドです.

このコマンドは,「過去のコミット状態に巻き戻す」ためのものです.

実際には完全に消えるわけではありませんが,参照されなくなり復元が難しくなるという点で注意が必要です.

図を使って説明します.

git-reset2.png

図の上段(before)では、コミットが A → B → C → D と続いており,現在のHEADは D を指しています.

ここで「やっぱりCの状態に戻したい」となったとき,git reset を使うと ブランチの先端(HEAD)そのものをCに移動させることができます.

restorereset も「過去の状態に戻す」という点では似ていますが,resetブランチの先端(HEAD)を過去のコミットに戻すため,以降の履歴(例:D)では見た目上削除されてしまいます.

※Git内部には残っているものの,通常のログでは見えなくなり,復元が難しくなります.

◼️ 終わりに

ここまで,Gitで過去の状態に戻るための4つのコマンドについて,図を用いてご紹介しました.

それぞれの役割や違いをイメージできるようになっていれば幸いです!

今後は,今回省略した「ステージング領域」や「コミット状態」など,より詳しい内容にも触れていく予定です.

それぞれのコマンドが内部でどう作用しているのかにも,少しずつ踏み込んでいければと思います!

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?