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 st
で git 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