Posted at

CLI で頑張ってブランチ名を覚えない

More than 1 year has passed since last update.

大した話ではないが,新しい職場で学んだ,Git のちょっと便利な tips を2つ.

ざっくりと GitHub Flow (master ブランチに Pull Request 経由で Feature 開発用ブランチにマージし,すぐにデプロイ可能にするような運用) を念頭においてほしい.


Feature ブランチを remote repository に push するときは HEAD 参照で良い

これまで,機能を開発してリモートブランチに push するときにブランチ名を書いていた.

$ git checkout -b feature/sample-development

$ git commit -m "色々な開発をしてコミットする"
$ git push origin feature/sample-development

が,この push 時のブランチ参照は,そのブランチで作業している限り HEAD で良い.

$ git checkout -b feature/sample-development

$ git commit -m "色々な開発をしてコミットする"
$ git push origin HEAD # `head` でもよい

HEAD がどういうものか理解していれば当然なのだけど,最初に教科書で学んだときのやりかたでずーっとやることで無駄をしてたなぁと反省.

ただし, master など大事かつ慎重に運用しなければいけないブランチに間違って push -f してしまう可能性もあるため,その場合はリモート側 (GitHub や BitBucket, GitLab など) の設定でカバーしたい.


直前にいたブランチを参照するときは - でよい

競合の解消やブランチグラフの美化のために,リモートで更新された master に追従する際にも,基本的に Feature ブランチの名前は覚えなくても良い.

たとえば, リモートの最新の master を取得して,現在開発している Feature ブランチをその master の上に Rebase する作業を考える.

$ # 今 feature/sample-development ブランチ上にいるとする

$ git fetch upstream
$ git checkout master
$ git merge upstream/master # ここまでの操作を git pull でできるならそれでも可
$ git checkout feature/sample-development
$ git rebase master # もしくはローカルの master の追従をしないときは `rebase upstream/master` でも

どの Feature ブランチを checkout すればよいのかに悩むケースがあるが,この場合は master をチェックアウトする前のブランチに戻りたいので,実は - で代用できる. 1

$ # 今 feature/sample-development ブランチ上にいるとする

$ git fetch upstream
$ git checkout master
$ git merge upstream/master
$ git checkout -
$ git rebase master





  1. これ,ドキュメント上で見つけられないのだけれど,どこに書いてあるんだろう… そんな状況でこの記事書いてて恐縮です…