はじめに
この記事はLinkbal Advent Calendar 2018の5日目の記事です。昨日は、私がリンクバルで一番プログラミングできると思っている方のletをconstにできるケース(とlet使用禁止というルールについて)という記事です。
どうも、水野(キンチキ)です。今回はgitについてちょっとしたことを書きます。
git push -u origin branch_name がダルい
gitで新しくブランチ切り、最初にpushするときに git push -u origin branch_name
と実行するじゃないですか?
これかなりめんどくさくないですか? いちいちタイプ数が多いんですよ。プライベートならともかく、業務だと頻繁にブランチ切ることありますし。
これを毎回ブランチ切る度に打ってて嫌になったので楽にする関数を作りました。
楽にする関数
以下の関数を .bashrc
や .zshrc
に追加してください。関数名はお好きなもので。
function gpush-u() {
BRANCH=$(git symbolic-ref --short HEAD | tr -d '\n') # カレントブランチ名を取得
git push -u origin $BRANCH
}
この関数を定義しておけば、例えばブランチが hogehoge
というとき、gpush-u
と打つだけで git push -u origin hogehoge
が実行されます。
git symbolic-ref --short HEAD
はカレントブランチを出力しますが、改行が含まれているため tr -d '\n'
で改行を消して変数に入れます。そしてそれを git push -u origin
に続けているだけです。
それだけなのですが、個人的にめちゃくちゃ便利なので、ぜひ使ってみてください。
これはわざわざ関数にせずにaliasでもいいかもしれないです。私の書き方がいけないのか、aliasだと上手く動かないことがあったので関数にしたら常に動くようになりました。おそらく、シェル起動時にgitリポジトリ以外のディレクトリなので git symbolic-ref --short HEAD | tr -d '\n'
が正常に動かなかったことが原因です。
【追記】 楽にするalias
コメント頂いた以下のコマンドならaliasでいけます。
# OK
alias gpush-u='git symbolic-ref --short HEAD | tr -d "\n" | xargs -I@ git push -u origin @'
# NG
alias gpush-u='git push -u origin `git symbolic-ref --short HEAD | tr -d "\n"`'
NGの方だと、バッククォートで囲われているところがコマンドを読み込んだ時(not gpush-u
を実行した時)に評価されて git symbolic-ref --short HEAD | tr -d "\n"
の部分が動かないのですね。
@YHiroyuki さんありがとうございます!
おわりに
簡単なシェルスクリプトを作ったり、ちょっとしたシェルの設定をするだけでコマンドラインはかなり便利になったりします。面倒に感じることやなんとかしたいと感じることはきっと解決策があるので、ぜひ調べてみてください。
私のかなり拙い.zshrc
ですが、他にもgitに関する関数など登録しているので、よろしければご覧ください!
dotfiles/.zshrc at master · kinchiki/dotfiles
それではまた。