🔨

@k_bigwheelが使い倒しているgit/ghコマンドのイデオム一覧

2023/01/12に公開

社内で共有したいと思ったので僕が普段良く使っているコマンドを書き出しました。

リモートブランチから最新情報を取ってきてrebaseするコマンド

git fetch origin --prune --tags -f && git rebase origin/HEAD

開発中は10分に1回ぐらいの頻度でやります。

完成したブランチをpushしてPRを作るコマンド

git push origin HEAD && gh pr create --assignee @me --fill -w

めちゃ便利。コマンドからPRを作れるようになったおかげで修正開始からPR作成までが5分以下になりました。

ヒストリーをいい感じに出すコマンド

git history のオプションは各々好みがあると思いますが、僕はこれをデフォルトにしています。

git log --stat=300,300 --stat-graph-width=20

ヒストリーをいい感じに出しつつ変更内容も表示するコマンド

git log --stat=300,300 --stat-graph-width=20 --patch

安全にforce pushする方法

git push origin HEAD -f --force-with-lease --force-if-includes

たしかここで教わりました。

git push -f が更に安全になる --force-if-includes - id:onk のはてなブログ

rebaseを使う場合、force pushする機会は多いです。
そんなときもこのオプションのおかげで知らないcommitが混ざっていないか不安になったりチェックに時間を割いたりせずに安心してpushできるようになりました。

直前のコミットに追加し忘れたファイルを追加する方法

git commit --amend --verbose

amendオプションは良い解説がたくさんあるので詳細はそちらに譲ります。

修正を一時的に退避・保存させる方法

git stash save

こちらもamendと同じく。

リモートmainにマージ済みのローカルブランチを安全に削除する方法

git checkout 削除したいブランチ
set target_branch HEAD && set current_branch (git branch --show-current) && git fetch origin --prune --tags -f && git checkout origin/$target_branch && git branch -d $current_branch

※ setコマンドや()による評価はfishシェル用なので、zshやbashの場合は書き換えてください

ローカルブランチを削除するとき、このブランチってすべてマージ済みだっけ?と迷うことがあると思うんですが、このコマンドを使うとマージ済みのブランチは削除、マージしていないブランチは残す、ということが自動でできます。

補足

上記コマンドではdetached HEAD状態になりますが、僕はdetached HEADを活用する開発を行っているため、これで問題ありません(もう5年以上このスタイルでやっています)。そうでない人は自分向けに少し修正したほうが使いやすいと思います。

detached HEADを活用する開発について: gitのローカルリポジトリでmasterやdevelopは使うな!

スポンサー

この記事はSpeeeでの業務中に書きました。

Discussion