gitで変更履歴を確認する方法　〜差分表示をするときによく使うコマンドメモ(log/show/diff/CLI完結型)〜

いろいろな差分等の取得方法をメモしています。

#### コミットID（短縮形ハッシュ）とコミットメッセージだけをリスト表示
 
```zsh
$ git log --oneline
abf123c タイトル修正
5aa2d00 ページネーション追加
a25ad67 キャプション修正
```

#### コミットID、ユーザ名、変更時期、コミットコメントをフォーマット指定しリスト表示

```zsh
$ git log --pretty=format:"%h - %an, %ar : %s"
abf123c - User Name, 3 days ago : タイトル修正
5aa2d00 - User Name, 3 days ago : ページネーション追加
a25ad67 - User Name, 4 days ago : キャプション修正
2cd113c - User Name, 5 days ago : CSS修正
3acb467 - User Name, 6 days ago : ブレークポイント追加
d5c27b1 - User Name, 1 weeks ago : メニュー追加
e2d13fa - User Name, 1 weeks ago : JS修正
ee1461d - User Name, 1 weeks ago : README修正

# %h を %H にすると短縮ではないハッシュを取得
$ git log --pretty=format:"%H - %an, %ar : %s"
abf123c6dfb790599fa6debfb3f3de28159817a8 - User Name, 3 days ago : タイトル修正
```

#### 上記とあわせ、日時表記もローカルにフォーマット指定してリスト表示

```zsh
$ git log --pretty=format:"%h - %an, %cd : %s" --date=format-local:"%Y/%m/%d %H:%M:%S"
abf123c - User Name, 2023/02/11 00:00:00 : タイトル修正
5aa2d00 - User Name, 2023/02/11 00:00:00 : ページネーション追加
a25ad67 - User Name, 2023/02/10 00:00:00 : キャプション修正
2cd113c - User Name, 2023/02/09 00:00:00 : CSS修正
3acb467 - User Name, 2023/02/08 00:00:00 : ブレークポイント追加
d5c27b1 - User Name, 2023/02/07 00:00:00 : メニュー追加
e2d13fa - User Name, 2023/02/07 00:00:00 : JS修正
ee1461d - User Name, 2023/02/07 00:00:00 : README修正
# 日時の数字にはダミーを入れています
```

#### コミットIDを指定して変更内容を見る

```zsh
$ git show abf123c
commit abf123c6dfb790599fa6debfb3f3de28159817a8
Author: User Name <name.user@example.com>
Date:   Sat Feb 11 09:41:26 2023 +0900

    タイトル修正

diff --git a/www/product/detail.php b/www/product/detail.php
index 8f8e629..ea42b95 100644
--- a/www/product/detail.php
+++ b/www/product/detail.php
@@ -108,7 +108,7 @@
         <div>
-            <h1>title</h1>
+            <h1>タイトル</h1>
             <p>
```

#### 変更があったファイルを一緒にログ表示する

```zsh
$ git log --name-status
commit ba2c40a7a7a9985766d180470f8d772e1adc37c1
Author: User Name <name.user@example.com>
Date:   Tue Nov 5 10:15:33 2024 +0900

    タイトル修正

M       www/product/index.php

commit 0f090ac78bc21a3aab24d77dd6b502c443e27a0e
Author: User Name <name.user@example.com>
Date:   Tue Nov 5 09:11:52 2024 +0900

    CSS修正

M       sass/pages/_product.scss
M       www/css/style.css
```

#### ある時点からある時点までの変更箇所をファイル名のみで表示

```zsh
$ git diff d5c27b1..abf123c --name-only
sass/page/_address.scss
www/address/confirm.php
www/address/index.php
www/css/style.css
www/components/nav.php
www/news/detail.php
www/product/detail.php
www/product/index.php
```

#### ある時点からある時点の特定ファイルの変更箇所をソースコードで表示

```zsh
$ git diff d5c27b1..abf123c www/news/detail.php
diff --git a/www/news/detail.php b/www/news/detail.php
index b22ed1a..adfacc1 100644
--- a/www/news/detail.php
+++ b/www/news/detail.php
@@ -1,6 +1,6 @@
 <!DOCTYPE html>
 <html lang="ja">
-<?php define('META_TITLE', 'ニュース'); ?>
+<?php define('META_TITLE', 'ニュース詳細'); ?>
 <head>
(END)
```

#### あるブランチとあるブランチの差分をファイル名で表示

```zsh
$ git diff --name-only origin/master origin/develop
.gitignore
README.md
package-lock.json
package.json
```

#### 作業ブランチの最新コミットからn個前のコミット差分（ファイル名）を取る

```zsh
$ git diff --name-only HEAD~1 HEAD
www/product/detail.php
www/product/index.php
```
CLIでgit差分を見るときの良い方法が他にもあればいろいろ教えてください！

#### 参考URL:
[Gitで差分ファイルを抽出+zipファイル化する方法](https://www.granfairs.com/blog/staff/git-archivediff)
[マジ便利、Gitリビジョン間の差分をエクスポート | すぐ使えるサンプルコマンド付き](https://www.sukerou.com/2021/03/git.html)
[第9話 git diff で差分を確認！【連載】マンガでわかるGit ～コマンド編～](https://www.r-staffing.co.jp/engineer/entry/20200228_1)
[git diff を徹底攻略！よく使うオプションまとめ](https://www-creators.com/archives/755)
[Gitでハッシュ値指定が重複したらどうなるのか](https://techblog.recochoku.jp/6815)
[Git ‐ 通信用語の基礎知識](https://www.wdic.org/w/TECH/Git)