この投稿は、リモート追跡ブランチ・追跡ブランチ・上流ブランチのまとめです
Gitのバージョンは、2.21.0
。
何が違うのか?
ローカルブランチ
ローカルブランチとは、ローカルリポジトリにあるブランチ
ローカルブランチの確認
$ git branch
* develop
feature/xx1
master
# ファイルで確認
$ tree .git/refs/heads/
.git/refs/heads/
├── develop
├── feature
│ └── xx1
└── master
リモートブランチ、リモート追跡ブランチ
- リモートブランチとは、リモートリポジトリにあるブランチ
-
リモート追跡ブランチとは、前回
fetch
(やpull
)をした時点でのリモートブランチを参照するブランチ。ローカルにある。
もっと詳しく
- リモート追跡ブランチ名は、
origin/develop
のように{remote}/{branch}
となる -
fetch
(やpull
)をすると自動的に更新される - リモート追跡ブランチを「派生元」として、ローカルブランチを作れる
- リモート追跡ブランチは、checkoutしない(
detached HEAD
が起きるかも)
リモートブランチの確認
$ git branch -r
origin/HEAD -> origin/master
origin/develop
origin/feature/xx1
origin/master
# ファイルで確認(リモートリポジトリ=origin)
$ tree .git/refs/remotes/
.git/refs/remotes/
└── origin
├── HEAD
├── develop
├── feature
│ └── xx1
└── master
上流ブランチ、追跡ブランチ
- 上流ブランチが設定されたローカルブランチは、追跡ブランチと呼ばれる
- 追跡ブランチの「追跡先」が上流ブランチ
- リモート追跡ブランチからローカルブランチを作ると、自動的に上流ブランチが設定。
-
リモート追跡ブランチ = 上流ブランチ
、ローカルブランチ = 追跡ブランチ
となる - この動作は.git/configで変えられる1
-
- 上流ブランチは、リモート追跡ブランチやローカルブランチを指定できる。
追跡ブランチ ≠ リモート追跡ブランチ
となる。
例えば、いまfeature/xx1
をcheckoutしているとすると
上流ブランチの場合
# 上流ブランチ = ローカルブランチ
$ git branch --set-upstream-to=develop
Branch 'feature/xx1' set up to track local branch 'develop'.
# 上流ブランチ = リモート追跡ブランチ
$ git branch --set-upstream-to=origin/develop
Branch 'feature/xx1' set up to track remote branch 'develop' from 'origin'.
なぜこんなことが...
追跡ブランチ、上流ブランチがあると、 git pull
, git push
といったコマンドを引数なしで実行可!初心者に優しくて便利&うれしい
Gitも進化してるんだね!2
追伸
Gitって、バージョン管理システムなのに、バージョンって言葉が使われない気がする。なぜ??セマンティックバージョニングのせいなのかな。
Git - git-rev-parse Documentation
-
バージョンによって動作が違う。
push.default
の挙動が、バージョン2.xからmatching
→simple
など。とうとう Git 2.0 が現実のものに。便利な機能満載 | Atlassian Blogs。各バージョンでの差異は、RelNotes\Documentation - git.git - The core git plumbing ↩