gitコマンドチートシート(応用編)


gitコマンドの応用的な使い方です。
これができればgit中級者になれるかもしれません。

削除されたリモートブランチの情報を削除する

gitはプルをする度にリモートに存在するブランチの情報を取得します。
git branch -aで見れるremote/xxxxxがそれです)

普通にgit pullを実行するとリモートブランチの取得はしますが
リモートで削除されたブランチについては何もしてくれないので
ローカルにリモート情報として残り続けてしまいます。

リモートで削除されたブランチ情報をローカルから削除したい場合は
プル実行時に以下のオプションを付与します。

git pull --prune

強制プル(force pull)

ブランチの状態を強制的にリモートの状態に合わせます。
ローカルのブランチがよく分からない状態になって捨てたい時や
誰かがリモートにforce pushした物を取り込む時に使えます。
(複数人が見てるブランチでforce pushするのは外道ですが…)

git fetch
git reset --hard origin/{ブランチ名}

※リモートはoriginの前提

直前のコミットに追加修正する

ちょっと修正が漏れていた時などに直前のコミットに追加修正を混ぜ込む方法です。
これを使うとコミット履歴を増やさずに済みます。

git add .
git commit --fixup=HEAD
git rebase -i --autosquash HEAD~2
(このあとのrebase画面はそのまま保存して閉じる)

★注意★

直前のコミットがプッシュ済みであった場合
上記コマンド後にforce pushが必要になります。
他の人と共有しているブランチにてforce pushをすると
他の人がpullできなくなる恐れがあります。
自分だけが触っているブランチで行いましょう。

マージ時にコミットログを1つにまとめる

細かくコミットをしながら作業を進めたい時などに
作業ブランチを作り、そこで遠慮なくコミットを沢山し、
その作業ブランチを元ブランチに戻す時にコミットログを1つに集約できます。

git merge --squash {マージ対象ブランチ}
git commit

Commitコメントに元々のCommitログがデフォルトで記載されていますが
そこは削除してしまっても構いません。
(残しておいても良いです)

現在のブランチとmasterブランチの差分を確認する

githubでプルリク送る時に見れるアレですね。
コマンドからも確認することができます。

bオプションをつけることで空白の差分は無視しています。

git diff -b origin/master

※補足
git diffの空白無視について、bオプションとwオプションがあり
以下のような違いがあるようです。

オプション 説明 「a=␣b」=>「a=␣ ␣b」 「a=b」=>「a=␣b」
b スペースの数を無視する 無視する 無視しない
w 空白は全て無視する 無視する 無視する

※上記表の「␣」は半角スペースとする

指定ファイルの指定コミットでの変更箇所を確認する

こちらもgithubでコミットログ見た時にみれるアレです。

git diff -w {コミットID}...HEAD {ファイル名}
例: git diff -w 11b2233...HEAD app/Controller/HogeController.php

また、あまり使わないかもしれませんが、もし差分行だけでなくファイル全てを表示したい場合は
Uオプション(差分の前後何行を表示するかを指定する)で10000行など大きい数字を指定すれば良いです。

git diff -w -U10000 {コミットID}...HEAD {ファイル名}

少し詳細なコミット履歴を表示する

statオプションをつけることで、どのコミットでどのファイルを変更したのかが分かります。
また、graphオプションをつけるとブランチのマージ履歴もグラフィカルに確認できます。

git log --stat --graph

gitコマンドのエイリアスを作る

~/.gitconfigに以下のような記載をすることでエイリアスが登録できます。

[alias]
	co = checkout
	br = branch
	logs = log --stat --graph

こうしておくと、git cogit checkoutと同様になり
git logsgit log --stat --graphと同様になったりします。