LoginSignup
5
3

More than 3 years have passed since last update.

Gitで上流ブランチを取得する第3の方法

Posted at

概要

git pull した時にマージされるブランチ、いわゆる「上流ブランチ」が何かを知りたい時、git status -sb の出力を読んだり、ファイル .git/config の中身を読めばわかるのですが、そんなことしなくても、

$ git rev-parse --abbrev-ref @{u}

すれば、わかるんです。

git status -sb

-s はshort formatで出力するためのオプション、-b はshort formatにおいてブランチ情報を出力するためのオプションで、出力の一行目にブランチの情報が現れます。

上流ブランチが設定されてない場合にはローカルブランチ名だけが出力されます。

$ git status -sb | head -1
## master

上流ブランチが設定されている場合にはローカルブランチ名の後に"..."、そのあとに上流ブランチ名が出力されます。

$ git status -sb
## master...origin/master

上流ブランチと同期されてない場合には、上流ブランチ名の後に、ローカルブランチと上流ブランチがコミットいくつ分離れているかが出力されます。上流ブランチより遅れている場合は

$ git status -sb
## master...origin/master [behind 7]

のように出力され、この状態で git pull すると origin/master のコミット7つがfast-forwardでマージできます。

$ git log --oneline master...origin/master|wc -l
       7

逆に手元のブランチの方が進んでいる場合は

$ git status -sb
## master...origin/master [ahead 1]

と出力され、この場合は git push するとローカルブランチと上流ブランチが同期されます。

一方、ローカルブランチと上流ブランチが分岐している場合、つまり git pull --ff-only が失敗し、git pull でマージコミットが生成される状況では

$ git status -sb
## master...origin/master [ahead 1, behind 7]

のように、ローカルブランチと上流ブランチの、共通の祖先を経由した距離が出力されます。

$ git log --oneline master...origin/master|wc -l
       8

また、設定された上流ブランチが削除されるなどして存在しなくなった場合には、

$ git status -sb
## feature...origin/feature [gone]

のようにgoneと出力されます。

.git/config

master の上流ブランチが origin/master である場合、.git/config には以下の内容が記載されています。

[branch "master"]
        remote = origin
        merge = refs/heads/master

この値は以下のようにしても読み出せます。

$ git config branch.master.remote
origin
$ git config branch.master.merge
refs/heads/master

ここで branch.master.merge の値 refs/heads/master はリモートリポジトリでの表現であり、ローカルリポジトリでは refs/remotes/origin/master で表現されることに注意が必要です。

@{u}

gitrevisions(7) に説明があるように、@{u} もしくは @{upstream} で上流ブランチを参照できます。

$ git rev-parse --abbrev-ref @{u}
origin/master
$ git rev-parse --abbrev-ref @{upstream}
origin/master

先に説明した二つの方法では上流ブランチの表現を得るには出力を加工する必要がありましたが、この方法だとそのまま出力してくれるので簡単です。

5
3
0

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
5
3