LoginSignup
1
0

More than 5 years have passed since last update.

git push の引数指定が面倒。デフォルト設定スクリプトを書いてみた

Last updated at Posted at 2018-04-16

ローカルのブランチのコミットをリモートに反映するとき

$ git push origin [ブランチ名]

とかってやりますよね。この origin [ブランチ名] の指定って正直面倒くさいです。

基本同じ名前のブランチにPUSHしますし、ブランチ名がある程度長くなってくるともう...

それだからといって、新しいブランチを作るごとに
git push -u origin [ブランチ名] で設定するのも面倒くさい。(参考)uオプションによるデフォルト設定

違うリモート先にPUSHするときは結局指定してやらないといけなくなります。

ならば、git push コマンドの挙動を変えてやりましょう。

想定する使い方

  • pushによって反映するリモート先は選択できるようにしたいので、リモートの名前を引数に取ります。
  • 第2引数を指定しなければ、カレントブランチと同名ブランチにpushします。
# originのカレントブランチと同名のブランチにpush
$ gipush origin

# originのnew_branchブランチにpush
$ gipush origin new_branch
  • また、pushを実行する前にpush先を以下のような形で最終確認できるようにします。
origin/develop にpushしてよろしいですか? (y/n) : 

bashのalias作成

ソース

~/.bashrc で git push のaliasを作成します。

function gipush {
  if [ ! $1 ]; then
    echo '[error] PUSHするリモート先を指定してください';
    return;
  fi
  branch_name=${2:-$(git symbolic-ref --short HEAD)}
  read -p "${1}/ ${branch_name} にpushしてよろしいですか? (y/n/f) :" YN
  if [ "${YN}" = "y" ]; then
    git push $1 $branch_name
  elif [ "${YN}" = "f" ]; then
    git push --force-with-lease $1 $branch_name
  fi
}

alias gipush=gipush

解説

今回の場合、引数によって処理を加えたいので関数として定義します。
そしてその関数をaliasとして設定しておけば、そのコマンドで実行することができます。

コマンドラインで指定した引数は、$1 , $2 という形で順に取得します。

まず、第一引数のpush先のリモート名がなければ、エラーを出し無効とします。

次に、第二引数の有無によってpush先ブランチを決定しています。

branch_name=${2:-$(git symbolic-ref --short HEAD)}

git symbolic-ref --short HEAD で現在のカレントブランチが出力されるので
引数があればそちらを、なければカレントブランチでという指定になります。

この時push先を最終確認したいのでメッセージを表示し、
read によって対話的な処理を行い分岐させています。

今回、普通の git push 以外にrebaseした際などに
使う --force-with-lease オプションも使いたかったのでこのような分岐にしています。

余談

カレントブランチ名を取得して...とやっていますが
ただリモートのカレントブランチにpushしたい場合は以下で問題ないようです。
(yamap_55 さん、ありがとうございます。)

$ git push origin HEAD

終わりに

普段シェルスクリプトを書かないので、ORの指定の仕方など勉強になりました。
elif なのが一番びっくりしました。rubyでも elsif なのに...

今回は、git push の挙動を変えるという方針で行きましたが
後から考えてみれば、git branchで作った際に、 -u で設定するって感じでもよかったですね..

今回のスクリプト別にいらないんじゃない感が残りますが、

最終確認のダイアログが欲しかったので、これでよしとします。:innocent:

1
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0