Edited at

Gitのリモート追跡ブランチ・追跡ブランチ・上流ブランチ

この投稿は、リモート追跡ブランチ・追跡ブランチ・上流ブランチのまとめです:laughing:

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)をすると自動的に更新される

  • リモート追跡ブランチを「派生元」として、ローカルブランチを作れる:smiley:

  • リモート追跡ブランチは、checkoutしない(detached HEADが起きるかも:laughing:


リモートブランチの確認

$ 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 といったコマンドを引数なしで実行可!初心者に優しくて便利&うれしい:laughing:

Gitも進化してるんだね!2

追伸

Gitって、バージョン管理システムなのに、バージョンって言葉が使われない気がする。なぜ??セマンティックバージョニングのせいなのかな。

Git - git-rev-parse Documentation





  1. Git - git-config Documentation 



  2. バージョンによって動作が違う。push.defaultの挙動が、バージョン2.xからmatchingsimpleなど。とうとう Git 2.0 が現実のものに。便利な機能満載 | Atlassian Blogs。各バージョンでの差異は、RelNotes\Documentation - git.git - The core git plumbing