git diff コマンド

公式サイト:

git-diff | Git Documentation [Official]

使い方

参考:

よく使う git diff コマンド – Qiita

忘れやすい人のための git diff チートシート – Qiita

git diff の使い方 | transitive.info

オプション

参考:

git diff の全オプション一覧 – Qiita

コミット間におけるファイルの変更を一覧表示する

コミットAからコミットBの間に、修正/追加/削除されたファイルを表示する。

$ git diff --name-status A..B

参考:

Git で commit 間の変更ファイル一覧を出力 – Qiita

変更のあったファイル名を列挙する/内容の差分は表示しない – Qiita

Git で削除/追加/変更されたファイル一覧を取得するには? – スタック・オーバーフロー

移動/名前を変更したファイルの差分を確認する

移動、あるいは名前を変更したファイルの差分を表示するには、-M オプションを使う。

$ git diff -M

もしくは、コミットのファイルを直接指定して差分を表示する。

$ git diff HEAD:path/to/oldfilename newfilename

参考:

Is there any way have git diff show that a file was moved, instead of removed and added – reddit

How to do a git diff on moved / renamed file? – Stack Overflow

ステージングしたファイルの差分を確認する

ワーキングツリーでまだステージングしていない変更を表示する。

$ git diff

git commit した時にコミットされる変更を表示する。

$ git diff --cached

ワーキングツリーと HEADdiff を表示する。

$ git diff HEAD

(出典Stack Overflow

参考:

git で add したあとに差分が見たくなった場合 – Qiita

忘れやすい人のための git diff チートシート – Qiita

git diff にもっと詳しくなる | Ren’s blog

Diff staged changes | makandra dev

Diff Staged and Unstaged Files | ShellHacks

How do I show the changes which have been staged? – Stack Overflow

Show git diff on file in staging area – Stack Overflow

what is the difference between --cached and --staged – Stack Overflow

Git diff HEAD vs --staged – Stack Overflow

ステージング状態の詳細を確認する

git status コマンドに -v オプション、または -vv オプションを指定して実行する。

$ git status -vv
  • -vステージングした変更の差分を表示する。(git diff --cached に相当する)
  • -vvステージングした変更とステージングしていない変更の差分を表示する。(git diff --cached + git diff に相当する)
パス先頭の文字が表しているエリア
  • cHEAD
  • iステージングエリア (=インデックス)
  • wワーキングツリー
ステージングの状態
  • diff --git i/xxx w/xxxステージングされていない変更 (インデックスが HEAD と同じ状態)
  • diff --git c/xxx i/xxxステージングした変更 (インデックスがワーキングツリーと同じ状態)

参考:

Diff Staged and Unstaged Files | ShellHacks

-v – git-status Documentation | Git [Official]

大文字小文字の違いを無視する

参考:

How to perform case insensitive diff in Git – Stack Overflow

アルゴリズム

  • --patience
  • --histogram

参考:

vimdiff でより賢いアルゴリズム (patience / histogram) を使う – Qiita

Git Source Code Review | Fabien Sanglard’s Website

What is `git diff --patience` for? – Stack Overflow

What’s the difference between `git diff --patience` and `git diff --histogram`? – Stack Overflow

--indent-heuristic オプション

参考:

5分でざっくりわかる git diff の indent Heuristic オプションの仕組み – Qiita

-w / --ignore-all-space オプション

空白文字の違いを全て無視する。

参考:

-w – git-diff | Git Documentation [Official]

--ignore-cr-at-eol オプション

行末のキャリッジリターンを無視する。

参考:

--ignore-cr-at-eol – git-diff | Git Documentation [Official]

変更の種類を指定する

修正があったファイルのみリストを表示する。

$ git diff --diff-filter=M --name-status
フィルターを指定する文字
  • A追加 (Added)
  • C複製 (Copied)
  • D削除 (Deleted)
  • M修正 (Modified)
  • R名前変更 (Renamed)
  • T種類の変更 (Type changed)
  • U未マージ (Unmerged)
  • X不明 (Unknown)
  • B破損 (pairing Broken)

参考:

--diff-filter – git-diff | Git Documentation [Official]

ディレクトリ毎の統計を表示する

--dirstat オプションを使う。

$ git diff --dirstat=files

参考:

--dirstat – git-diff | Git Documentation [Official]

特定のディレクトリ以下のみ比較する

--relative オプションに相対パスを指定する。

$ git diff --name-status --relative=path/to/subdir

参考:

Git で特定のディレクトリ以下の diff を見るときは、relative オプションを使う – Qiita

空白を含むパスを xarg コマンドに渡す

git コマンドに -z オプションを指定し、xarg コマンドに -0 オプションを指定する。

$ git diff --name-only --diff-filter=A -z | xarg -0 git add

参考:

Using git diff with xargs -0, spaces in file names – Super User

git difftool コマンド

参考:

git-diff と git-difftool を混同していた話 | ばうあーろぐ

difftool を複数設定する方法 | oki2a24

How can I get a side-by-side diff when I do “git diff”? – Stack Overflow

ファイルやディレクトリを除外する

参考:

git diff で特定のファイル、ディレクトリを除外する方法 (ワンライナー) – Qiita

Excluding folders from git log output | Kashyap Kondamudi

Want to exclude file from “git diff” – Stack Overflow

Exclude a directory from git diff – Stack Overflow

How can I make ‘diff -X’ ignore specific paths and not file names? – Super User

差分の表示形式

参考:

マージとコンフリクトを理解する – Qiita

Combined diff Format | Git Documentation [Official]

How to read the output from git diff? – Stack Overflow

How to read Git 3-way unified diff output format? – Stack Overflow

差分がある時のみコミットする

--cached--exit-code--quiet オプションを使う。

$ git diff --cached --exit-code --quiet || git commit

参考:

Git の diff コマンドにある --exit-code オプション | Hail2u

リポジトリ外でディレクトリの比較を行う

空白文字の違いを除いて修正があったファイルの差分を表示する。

$ git diff --no-index -w --diff-filter=M dirA/ dirB/

空白文字の違いを除いて修正があったファイルのファイル名と行数を表示する。

$ git diff --no-index -w --diff-filter=M --stat dirA/ dirB/

diff コマンドと colordiff を使う。

$ diff -rbu --strip-trailing-cr -x .git \
  dirA/ dirB/ \
  | colordiff | less -R

ファイル末尾の改行

参考:

No newline at end of file の修正 – Qiita

「No newline at end of file」の対処 | Tips というかメモ

行末の「No newline at end of file」がうざったい | C_6B4A2B の日記

No newline at end of file というエラー | ハックノート

最後に改行がないファイルが作れない · Issue #152 · vim-jp/issues – GitHub

No Newline at End of File | thoughtbot

git diff thinks the last line of the file has been moved after the end of file? – Stack Overflow

What’s the point in adding a new line to the end of a file? – Unix & Linux Stack Exchange

バイナリの差分を作成する

--binary オプションを付けて、バイナリの差分を作成する。

$ git diff --binary @ @~ -- path/to/file > "commit_$(git rev-parse --short @).patch"

参考:

Git でバイナリパッチを作ってみよう (git diff --binary) – Qiita

Git でバイナリ扱いのファイルの text diff を見る方法 | gotohayato.com

How can I diff binary files in Git? – Super User

How to determine if Git handles a file as binary or as text? – Stack Overflow

ハイライト表示する

参考:

Git の diff/patch/差分をシンタックスハイライトする | DevelopersIO

フォーマット

ドキュメント:

diff-format | Git Documentation [Official]

man ページ

git-diff – Show changes between commits, commit and working tree, etc | Ubuntu Manpage

Diff Highlight

git diff の結果をハイライト表示させる。

Homebrew で Git をインストールした場合、/usr/local/share/git-core/contrib/diff-highlight/diff-highlight に存在する。

/usr/local/bin 内にシンボリックリンクを張る。

$ sudo ln -s \
  /usr/local/share/git-core/contrib/diff-highlight/diff-highlight \
  /usr/local/bin/diff-highlight

diff の結果を diff-highlight を通して表示する。

$ git -c color.ui=always diff | diff-highlight | less -R

コード:

diff-highlight – git/git – GitHub

参考:

diff-highlight で Git の diff を見やすくする | work.log

Git の diff を美しく表示するために必要なたった1つの設定 | 詩と創作・思索のひろば

git status can’t find diff-highlight – Stack Overflow

patchutils

  • filterdiff

リポジトリ:

twaugh/patchutils: Manipulate Patch Files – GitHub

参考:

git diff で特定のファイル/ディレクトリを除外したい – Qiita

Git External Diff

コード:

git-external-diff – postgres/postgres – GitHub

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA