Gitのプラグイン的なコマンドを提供するGit Townを試してみました。
http://www.git-town.com/
ドキュメントや動画を見る限り、Git Townのコマンド一つで複数のGitコマンドを実行することでワークフローをもっとシンプルにしようということらしいです。
すぐ陳腐になってしまうのでinstall方法とかは公式をみましょう。(いやコマンドもそうなんですけどね)
個人的にリモートの変更を取り込む際にローカルの変更を一旦stashしてpullするみたいなワークフローが辛くなってきたのでそこらへんが改善すればいいなぁって思って試してみました。
ブランチを作る
git town hack <branch name>
するとGit townがまずmainのbranchを聞いてきます。で今回はmasterを選択
そのあとperennialブランチを聞かれるのですが今回はmasterと同じで
するとデフォルトでmainブランチを追随するようになります。
mainブランチから新たなブランチを作成。同時にremoteにもブランチを作成してくれます。
途中git add -A
を行うのでローカルにあるファイルは問答無用にaddされます。ここら辺は郷に入っては郷に従へということで。
featureブランチでメインブランチに追随する
作ったfeatureブランチからmainブランチに追随する
git town sync
個人的にはfeatureブランチでmainブランチを追随するときには単なるマージではなくてrebase
を使用したいので、ちょっと自分のワークフローとは違うと感じました。
がgit townでは最終的にsquash mergeするので大勢に影響はないです。
ちなみにconflictが起きた時は通常のマージをする時のように直してcontinueすれば大丈夫です。
Pull Request
git town new-pull-request
最新のmainブランチを反映した上でremoteのfeatureブランチへpushしてブラウザ上でPRページを開きます。
ブランチをマージする
git town ship
mainのブランチにsquash mergeされます。のでコミットメッセージが汚くてもキニシナイキニシナイ。まだここで綺麗なメッセージにできるチャンスがあります。
流れとしては
mainブランチを最新 -> squash merge -> mainブランチにpush -> 該当ブランチの削除
が行われます。
今まで色々考えてめんどくせぇってなってたんですが、このようにある程度何にも考えずにワークフローを進めることができます。
ブランチを消す
git town kill <branch name>
なぜremoveではなくkillを採用したのかは割と謎ですが、remoteのブランチも同時に消してくれる便利。
undoオプションがあるので消えたブランチの復活もreflog確認してみたいなことをする必要がないです。
ブランチをrenameする
git town rename-branch [<old_branch_name>] <new_branch_name> [-f]
どうやってやってるのかなぁって思って見てみたら。単純にブランチを消して、新たに作り直しているだけでした。でも便利だ。
その他
ブランチのpullはデフォルトはrebaseのようです。
pushのデフォルトはtagも含めます。
感想
正直今からコマンド覚え直すのだるいヨ。って思ってたんですが、普段のワークフローはブランチ作成して、mainブランチを追随して、マージするということしかやってないにもかかわらずrebaseしたり、stashしたりと結構煩雑だったので基本のコマンドが3つで済むというのは大変便利だと感じました。
各コマンドがそれぞ何やってるか概ね理解したら安心して普段使いできそうな予感です。
Git Townみてて知らなかったgitコマンド/オプション
使ってるだけだと偉そうにGit Townを評価しているような気持ちになってしまったので、残りはGit Townから学んだことを列挙します。
普段Source Treeどっぷりなので基本的なコマンド知らなかったりします。。。
git fetch --prune
--prune
をつけることですでにremoteでは存在していないブランチをトラッキングしなくしてくれる。localからブランチが消えるわけではないです。
git merge --no-edit
--no-edit
自動的にマージメッセージを付与するオプション。
git push origin :
リモートブランチの削除
もしくは
git push --delete origin <branch name>
git push -u
-u
はlocalとremoteのブランチを参照させるオプション。このオプションがないとgit pull <remote> <branch>
と毎回remoteとbranchを指定しなければならなくなります。