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 status と git log で状況を把握するのが基本。