はじめに
こんにちは!ITスクールRareTECHにてCS(Customer Support)を担当している池村です。今回の記事は、Gitコマンドのログやファイル差分の確認・修正のためのコマンド紹介です。
log
について
まずはgit log
についてです。
こちらは今までのcommit
履歴を確認することができるコマンドです。
git log
使い方はシンプルですね。
いくつかcommit
されたブランチであれば、以下の画像のように履歴が表示されるはずです。
※塗りつぶされているのはユーザー名(メールアドレス)です。
commit ハッシュ値 (一意の文字列 + 数値)
Author(作成者)
Date(作成日)
コミットメッセージ
見やすさを重視したオプション
git log
にはオプションがいくつかあります。
--oneline
オプションは、短く簡潔にコミット履歴を1行ずつ表示するオプションになります。
git log --oneline
これを使うと以下の画像のような表示結果に変化します。
コミットメッセージは真似しないでくださいね。良い書き方ではありません。
だいぶ前のコードの履歴を見ているのでご容赦を🙏
ブランチがどう切られて、結合されたかが確認できるオプション
git log
コマンドに、--graph --decorate --all
をつけると、ブランチの状態を確認できます。
--graph:ASCIIアートでツリーを表示してくれる
--decorate:ブランチやタグの情報を表示してくれる
--all:すべてのブランチの履歴を表示(デフォルトは現在のブランチのみ)
フィルタリングしたい時のオプション
logはたくさん出てくるので、直近のものを見たい時や、日付を指定して確認をすることもできます。
最新のコミットを見る
git log -5
指定したユーザーの履歴を表示
git log --author="ユーザー名"
日時を指定
git log --since="2025-02-20" # 日付は自由に
ファイルを指定して履歴を見る
git log -- path/to/file.txt # ご自身のプロジェクトのPATHを指定してください
ログは様々な表示結果を出せるので、オプションもある程度覚えておくと便利です。
diff
について
git diff
コマンドは、ファイル内の差分を確認するためのコマンドです。
普通に使うと、add
されていないファイルとの差分を見ることができます。
git diff
私の環境の場合、赤く書かれているのが変更前、黄色で書かれているのが変更されたところです。
ただ、これは改行があるかないかの差分ですね。
色付けされているところの下に改行があったかないかの違いを出してくれています。
ステージングされたファイルの差分をみる(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と呼ばれる一意の識別子が表示されますが、それを使って、両者の差分を確認することができます。
今回添付した画像では、HEADと4つ前のコミットの差分を見比べてみています。JSファイルに差分があるようですね。
ブランチごとの差分を見る場合
コミットごとではなく、ブランチごとの差分ももちろん見ることができます。
git diff main develop
この場合は、mainブランチとdevelopブランチを見比べることができる、ということですね。
reset
について
git reset
について説明します。これはコミットを取り消すコマンドになります。
これは初心者が一番怖いコマンドなんじゃないでしょうか?気持ちはとてもわかります。私は今でも怖いです。
まずは一番弱いreset
からみていきましょう。
--soft
git reset --soft HEAD^ # 最新のコミットの一つ前を指す
この--soft
のオプションの場合は、コミット状態からadd
の状態に戻る、一番安全なreset
です。ファイルを書き換えた部分もなくなったりはしません。
--mixed
次に--mixed
のオプションですが、こちらはadd
された、という結果もなかったことにできます。もちろんファイルの変更部分は消えたりしません。
git reset --mixed HEAD^
ちなみにreset
のデフォルトは、このmixedなので、何もオプションをつけないとこれが選ばれます。
--hard
さて、ここからが怖くなってくるオプションですね。
--hard
オプションは取り扱い注意です。
git reset --hard HEAD^
このコマンドが怖いところは、ファイルの変更点も完全に消えてしまうことです。
- コミットは消える
-
add
してステージングに乗ったことも消える - ファイルの変更点も消える
完全になかったことになります。
一応復旧方法はあります。後ほど解説します。
まあ、まだ一個前のコミットに戻るくらいでは、完全に恐怖ではないですね。
では以下のコマンドではいかがでしょう?
git reset --hard 特定のコミットID
先ほどは一つ前のHEAD^に戻しましたが、このコミットIDを使うと、初期状態まで戻すことも可能になってしまいます。
何度もいいますが、取り扱い注意です!
間違って--hard
を使った場合
さて、間違ってコードの変更分も消してしまった人への救済処置ですが、以下のような書き方が可能です。
git reflog
上記のコマンドを打つと、以下のような結果が表示されます。
e5f1c7b HEAD@{0}: reset: moving to 1a2b3c4
bf5f890 HEAD@{1}: commit: Fix login bug
ここで見るべきはHEAD@{1}
です。
これを指定することで、間違って消してしまったコミットを元に戻すことができます。git reflog
はHEADがどう移動したかを表示してくれています。
git reset --hard HEAD@{1}
これで安心ですね!しっかり元に戻るはずです!
おわりに
やはりreset
コマンドは怖いですね!
でも知っていれば何も怖くないので、初心者はこの記事の内容を全面的に覚えておいてください!
次回の記事はrevert
とその他のコマンドを紹介していきます。