ShellScript
Bash
Git
GitHub
GitLab

ターミナルからprコマンドで、Githubに[WIP]PullRequestを一瞬で出そう!

実装前に、[WIP]でプルリクはあげておきたい🤗
実装目的や方法を記述しておきたいし、開発メンバーに進捗状況を可視化したいため。

でもいくつかコマンド叩くのも、Github上で緑のボタンポチるのも面倒くさい😭

そこで、一瞬でどのブランチにいても最新のmasterからブランチを切ってくれて、
[WIP]でプルリクを出してくれる prコマンド を紹介します。

要は

PullRequestを出すprコマンドなんてものは存在しないので、
$ vi ~/.bashrc などに関数として下記を定義して、
$ source ~/.bashrc を叩いてください。

function pr() {
  if [ $1 ]; then
    git checkout master;
    git pull origin master;
    git checkout -b `date "+%Y%m%d"`_$1;
    git commit --allow-empty -m "feat:create pull request";
    git push origin `git rev-parse --abbrev-ref HEAD`;
    hub pull-request -m "[WIP]$2";
    hub browse;
  else
    echo "第1引数でブランチ名、第2引数でPRタイトルがほしーの!"
  fi
}

これで準備完了。
$ pr ブランチ名 プルリクタイトル を叩くだけ!

$ pr fix_hogefuga hogefugaのバグ修正

はい!プルリク作れました。終了。

image.png

hubコマンドないよと言われたら、下記コマンドでインストールしてください。
最初は、Githubのユーザー名とパスワードを求められます。二段階認証設定してるならそれも。

$ brew install hub

解説・補足

① masterブランチに切り替える
$ git checkout master
② 最新のmasterリモートブランチを取得する
$ git pull origin master
③ 日付_引数をブランチ名としてブランチを作成して、切り替える
$ git checkout -b `date "+%Y%m%d"`_$1

今回はブランチ名をユニークにしたいので、先頭に本日の日付を付与しています。

④ コミット対象がない場合でもコミットする
$ git commit --allow-empty -m "feat:create pull request"
⑤ 現在のブランチでpushする
$ git push origin `git rev-parse --abbrev-ref HEAD`
⑥ PullRequestを出す
$ hub pull-request -m "[WIP]$1"
⑦ ブラウザで該当リポジトリのGithubを開く
$ hub browse

理想は、該当のPullRequestにアクセスして欲しいが、該当のPullRequestのIDの取得方法がわからず断念。
どなたか教えてください🙏🙏🙏

(応用)テンプレート利用の場合

テンプレートを利用している場合は、 hub pull-request -m "[WIP]$2"; の部分だけ変更すれば大丈夫です。利用しているテンプレートのマークダウンをコピペしてください。改行は\nで。

function pr() {
  if [ $1 ]; then
    git checkout master;
    git pull origin master;
    git checkout -b `date "+%Y%m%d"`_$1;
    git commit --allow-empty -m "feat:create pull request";
    git push origin `git rev-parse --abbrev-ref HEAD`;
        echo -e "[WIP]$2`\n\n# 目的・背景\n\n# テスト(こんな感じでコピペ。)" | hub pull-request -F -;
    hub browse;
  else
    echo "第1引数でブランチ名、第2引数でPRタイトルがほしーの!"
  fi
}
テンプレートの作り方

対象リポジトリに .github ディレクトリと、その配下に ISSUE_TEMPLATE.md PULL_REQUEST_TEMPLATE.md を作れば良いです。そうすると、issueやPullRequest作成する際に、こんな感じで、テンプレートを呼んでくれます。

image.png

備考

調べたら prコマンド って、あるんですね。印刷用にファイルを整形するコマンドだそう。
特に問題ないと思いますが気になるようでしたら、よしなに変更してください。