12
14

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入門 [log, diff, reset, reflog]

Last updated at Posted at 2025-02-20

はじめに

こんにちは!ITスクールRareTECHにてCS(Customer Support)を担当している池村です。今回の記事は、Gitコマンドのログやファイル差分の確認・修正のためのコマンド紹介です。

7810338c-dccc-4c8f-97be-f4ff4a68954d_720.png

logについて

まずはgit logについてです。
こちらは今までのcommit履歴を確認することができるコマンドです。

logの確認方法
git log

使い方はシンプルですね。

いくつかcommitされたブランチであれば、以下の画像のように履歴が表示されるはずです。

名称未設定3.jpg

※塗りつぶされているのはユーザー名(メールアドレス)です。

commit ハッシュ値 (一意の文字列 + 数値)
Author(作成者)
Date(作成日)
コミットメッセージ

見やすさを重視したオプション

git logにはオプションがいくつかあります。
--onelineオプションは、短く簡潔にコミット履歴を1行ずつ表示するオプションになります。

--onelineオプション
git log --oneline

これを使うと以下の画像のような表示結果に変化します。

image.png

コミットメッセージは真似しないでくださいね。良い書き方ではありません。
だいぶ前のコードの履歴を見ているのでご容赦を🙏

ブランチがどう切られて、結合されたかが確認できるオプション

git logコマンドに、--graph --decorate --allをつけると、ブランチの状態を確認できます。

image.png

--graph:ASCIIアートでツリーを表示してくれる
--decorate:ブランチやタグの情報を表示してくれる
--all:すべてのブランチの履歴を表示(デフォルトは現在のブランチのみ)

フィルタリングしたい時のオプション

logはたくさん出てくるので、直近のものを見たい時や、日付を指定して確認をすることもできます。

最新のコミットを見る
最新の5つのコミットだけを見る
git log -5

image.png

指定したユーザーの履歴を表示
ユーザー指定
git log --author="ユーザー名"

image.png

日時を指定
日時指定
git log --since="2025-02-20" # 日付は自由に

名称未設定4.jpg

ファイルを指定して履歴を見る
ファイル指定
git log -- path/to/file.txt # ご自身のプロジェクトのPATHを指定してください

image.png

ログは様々な表示結果を出せるので、オプションもある程度覚えておくと便利です。

diffについて

git diffコマンドは、ファイル内の差分を確認するためのコマンドです。
普通に使うと、addされていないファイルとの差分を見ることができます。

diffを使う
git diff

image.png

私の環境の場合、赤く書かれているのが変更前、黄色で書かれているのが変更されたところです。

ただ、これは改行があるかないかの差分ですね。
色付けされているところの下に改行があったかないかの違いを出してくれています。

ステージングされたファイルの差分をみる(addされた)

ステージングされたファイルの差分を見る場合は、以下のコマンドを叩きます。

ステージングされているファイルを見る場合
git diff --staged
最新のコミットとの差分をみる場合
書き方
git diff HEAD

ここでこのHEADについて解説します。

  • HEAD:最新のコミットを指している
  • HEAD^:最新のコミットの1つ前を指している
  • HEAD^^:最新のコミットから2つ前を指している
  • HEAD~2:こんな書き方もできるHEAD^^と一緒
  • HEAD~6:^を増やしていくこともできますが、こっちの方が良い

HEADという文字を使って、ファイルの状態を元に戻したりもするので、結構重要です。

特定のコミットの状態との差分を見る場合
特定のコミットを指定
git diff abc123 def456 # コミットIDの頭文字を使う(全部使っても良い)

git logを使うと、コミットIDと呼ばれる一意の識別子が表示されますが、それを使って、両者の差分を確認することができます。

image.png

今回添付した画像では、HEADと4つ前のコミットの差分を見比べてみています。JSファイルに差分があるようですね。

ブランチごとの差分を見る場合

コミットごとではなく、ブランチごとの差分ももちろん見ることができます。

ブランチごとの差分
git diff main develop

この場合は、mainブランチとdevelopブランチを見比べることができる、ということですね。

resetについて

git resetについて説明します。これはコミットを取り消すコマンドになります。
これは初心者が一番怖いコマンドなんじゃないでしょうか?気持ちはとてもわかります。私は今でも怖いです。
まずは一番弱いresetからみていきましょう。

--soft

soft
git reset --soft HEAD^ # 最新のコミットの一つ前を指す

この--softのオプションの場合は、コミット状態からaddの状態に戻る、一番安全なresetです。ファイルを書き換えた部分もなくなったりはしません

--mixed

次に--mixedのオプションですが、こちらはaddされた、という結果もなかったことにできます。もちろんファイルの変更部分は消えたりしません

mixed
git reset --mixed HEAD^

ちなみにresetのデフォルトは、このmixedなので、何もオプションをつけないとこれが選ばれます。

--hard

さて、ここからが怖くなってくるオプションですね。
--hardオプションは取り扱い注意です

hard
git reset --hard HEAD^

このコマンドが怖いところは、ファイルの変更点も完全に消えてしまうことです。

  • コミットは消える
  • addしてステージングに乗ったことも消える
  • ファイルの変更点も消える

完全になかったことになります。
一応復旧方法はあります。後ほど解説します。

まあ、まだ一個前のコミットに戻るくらいでは、完全に恐怖ではないですね。

では以下のコマンドではいかがでしょう?

特定のコミットまで戻る
git reset --hard 特定のコミットID

先ほどは一つ前のHEAD^に戻しましたが、このコミットIDを使うと、初期状態まで戻すことも可能になってしまいます。

何度もいいますが、取り扱い注意です!

間違って--hardを使った場合

さて、間違ってコードの変更分も消してしまった人への救済処置ですが、以下のような書き方が可能です。

HEADの変更を確認する
git reflog

上記のコマンドを打つと、以下のような結果が表示されます。

実行結果
e5f1c7b HEAD@{0}: reset: moving to 1a2b3c4
bf5f890 HEAD@{1}: commit: Fix login bug

ここで見るべきはHEAD@{1}です。
これを指定することで、間違って消してしまったコミットを元に戻すことができます。git reflogはHEADがどう移動したかを表示してくれています。

間違ったresetを元に戻す
git reset --hard HEAD@{1}

これで安心ですね!しっかり元に戻るはずです!

おわりに

やはりresetコマンドは怖いですね!
でも知っていれば何も怖くないので、初心者はこの記事の内容を全面的に覚えておいてください!
次回の記事はrevertとその他のコマンドを紹介していきます。

12
14
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
12
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?