git で任意のブランチが未プッシュかどうか検証します。
やり方は複数ありますが、今回は
git ls-remote
git rev-parse
を利用します
サンプル
remote
※ ls-remote は個別のブランチを取得するオプションがないので取得した値から情報を切り出す必要がある
$ git clone https://github.com/tbpgr/linter-reek
$ cd linter-reek
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/greenkeeper-atom-linter-8.0.0
remotes/origin/greenkeeper-eslint-3.3.1
remotes/origin/greenkeeper-eslint-3.4.0
remotes/origin/greenkeeper-eslint-config-airbnb-base-5.0.3
remotes/origin/greenkeeper-eslint-plugin-import-1.12.0
remotes/origin/master
# greenkeeper-atom-linter-8.0.0 の remote sha を調べてみる
$ git ls-remote origin | grep greenkeeper-atom-linter-8.0.0 | cut -f1
4d6ab932c68d50c912cf3562990d542dd8572bc6
local
$ git checkout -b greenkeeper-atom-linter-8.0.0 -t origin/greenkeeper-atom-linter-8.0.0
$ git rev-parse greenkeeper-atom-linter-8.0.0
4d6ab932c68d50c912cf3562990d542dd8572bc6
# 試しに greenkeeper-atom-linter-8.0.0 ブランチを変更してみる
$ touch hoge;git add hoge;git commit -m "test"
[greenkeeper-atom-linter-8.0.0 40256a6] test
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hoge
$ git rev-parse greenkeeper-atom-linter-8.0.0
40256a67e5cb4bdb5d46df4aecf36702783fdc9c
# git log で答え合わせ
$ git log -1
commit 40256a67e5cb4bdb5d46df4aecf36702783fdc9c
まとめ
remote で取得した値と local で取得した値を比較することで未pushかどうか判別できます。