【Git】稀によく使うGitコマンド集

git log

コミットログに変更差分を表示する

git log -p

マージコミットの差分は表示できないため, diff を使用する必要がある.

コミットメッセージでコミットログを絞り込む

git log --grep <文字列>
# 例. git log --grep 補完計画

特定ファイルのコミットログのみ表示する

git log <regex>
# 例. git log path/to/katsuragi.cs

全てのブランチやタグに関連するコミットをログ表示する

git log --all

ブランチBに存在し, ブランチAには存在しない全てのコミットログを表示

git log A..B

ブランチAとブランチBの片方にしか存在しないコミットログを表示

git log A...B

マージ時にコンフリクトが発生した際,
ファイルの変更を行ったコミットを特定したい時に有用.

ブランチAに checkout している状態で,
git merge B でコンフリクトが発生した場合に,

1) git merge --abort で merge を終了
2) git log A...B --oneline --left-right コンフリクトしたファイル.txt
でコンフリクトしたファイルに変更を加えたコミットが一覧表示できる.

両方のブランチの変更が一度に表示されるため,
--left-right オプションを使用すると
どちらのブランチに含まれるコミットかわかりやすい.

上記の例だと ブランチAのコミットログには< が表示され,
ブランチBのコミットログには>が表示されるようになる.

マージコミットMで入ったコミットを表示

git log ^M^ M

👉git merge A を実行して取り込まれたA側のコミットが表示される.


git diff

diff の結果をファイル名で絞り込む

git diff <regex>
# 例. git diff *.cs

マージコミットMの差分を表示

git diff M^ M

👉git merge A を実行して取り込まれたA側の差分が表示される.

git diff M^2 M

👉取り込んだ側の差分が表示される.

ステージングされたファイルの差分を表示する

git diff --cached

AB間の最新の祖先とBを比較した差分を表示

git diff A...B

ブランチAとブランチBの両方が作業中のブランチの場合に,
Bにのみ存在する差分を表示したい場合に使用する.


git config

gitconfig のスコープは local, global, system がある.
ローカルは特定リポジトリのみに適用,
グローバルはユーザの全てのリポジトリに適用,
システムはシステム上の全てのユーザと全てのリポジトリに適用される.

gitconfig を一覧表示する

git config --global --list

エイリアスを設定する

git config --global alias.st status

実行すると, git stgit status が使用できるようになる.

gitconfig を編集する

git config --global --edit

git stash

stash の一覧を表示

git stash list

stash の変更を表示

git stash show -p stash@{0}

その他

リポジトリ内でファイル名検索する

git ls-files <regex>
# 例. git ls-files *.cs

ファイル内に<文字列>が含まれるファイルを検索

git grep <文字列>
# 例. git grep fuyutsuki

checkoutせずに特定ブランチの特定ファイルの内容を表示

git show <branch>:<path/to/file>
# 例. git show master:katsuragi.cs

特定ファイルを特定ブランチの状態にする

git checkout <branch> <path/to/file>
# 例. git checkout master katsuragi.cs