add/commit/pushだけ使っていた時期を経て、今はわりといろいろ使うようになった。自分がよく使うものをまとめておく。

git stash

作業中に別ブランチに移動したいとき。

git stash
git checkout other-branch
# ...作業...
git checkout 元のブランチ
git stash pop

stash push -m "メッセージ" でわかりやすい名前をつけておくと後で迷わない。

git rebase -i

コミット履歴を整理するとき。プッシュ済みのコミットには使わない(他の人と共有している場合)。

git rebase -i HEAD~3  # 直近3コミットを対象に

squash(s)でコミットをまとめる、reword(r)でメッセージを変える、くらいしか使っていない。

git bisect

バグが入ったコミットを二分探索で特定する。「いつからか壊れてる」ときに便利。

git bisect start
git bisect bad           # 今のコミットはバグあり
git bisect good v1.0.0   # このタグの時点ではOKだった
# あとはgitが自動で中間コミットをcheckoutしてくれる
# 各コミットで確認して good/bad を入力
git bisect reset         # 終わったら元に戻す

初めて使ったとき感動した。

git log のオプション

git log --oneline --graph --all

ブランチの分岐がわかりやすくなる。エイリアスに登録している。

git config --global alias.lg "log --oneline --graph --all"

git reflog

「git reset —hard してしまった」「間違えてブランチ消した」ときの救済。

git reflog
# コミットハッシュを探して
git checkout <hash>

reflogは30日間保持される。ローカルのみなのでプッシュしていないコミットには使えない(リモートには影響しない)。


Gitは奥が深いが、上記くらい使えると大体のトラブルは乗り越えられる。困ったらまず git statusgit log で状況を把握するのが基本。