1. ホーム
  2. git

[解決済み] ローカルブランチ、ローカルトラッキングブランチ、リモートブランチ、リモートトラッキングブランチの違いは何ですか?

2022-04-21 10:05:13

質問

Git を使い始めたばかりなのですが、ブランチの種類が多くて混乱しています。どなたか、以下のブランチの種類について教えていただけませんか?

  • ローカルブランチ
  • ローカル・トラッキング・ブランチ
  • リモートブランチ
  • リモートトラッキングブランチ

両者の違いは何でしょうか?また、それらはどのように連携しているのでしょうか?

簡単なデモコードがあれば本当に助かると思います。

どのように解決するのですか?

A ローカルブランチ は、あなた(ローカルユーザー)だけが見ることのできるブランチです。あなたのローカルマシン上にのみ存在します。

git branch myNewBranch        # Create local branch named "myNewBranch"

A リモートブランチ は、遠隔地にあるブランチ(ほとんどの場合 origin ). 新しく作成したローカルブランチをプッシュすることで myNewBranch から origin . これで他のユーザーも追跡できるようになりました。

git push -u origin myNewBranch   # Pushes your newly created local branch "myNewBranch"
                                 # to the remote "origin".
                                 # So now a new branch named "myNewBranch" is
                                 # created on the remote machine named "origin"

A リモートトラッキングブランチ は、リモートブランチのローカルコピーです。いつ myNewBranch にプッシュされます。 origin という名前のリモートトラッキングブランチが作成されます。 origin/myNewBranch があなたのマシンに作成されます。このリモート追跡ブランチは、リモートブランチ myNewBranchorigin . を更新することができます。 リモートトラッキングブランチ と同期させることができます。 リモートブランチ を使って git fetch または git pull .

git pull origin myNewBranch      # Pulls new commits from branch "myNewBranch" 
                                 # on remote "origin" into remote tracking
                                 # branch on your machine "origin/myNewBranch".
                                 # Here "origin/myNewBranch" is your copy of
                                 # "myNewBranch" on "origin"

A ローカル追跡ブランチ ローカルブランチ は、他のブランチを追跡しています。これは、もう一方のブランチとの間でコミットをプッシュ/プルできるようにするためです。ローカル追跡ブランチは、ほとんどの場合リモート追跡ブランチを追跡します。ローカルブランチを origin を使用して git push コマンドで -u オプションを指定すると (上の図のように)、ローカルブランチの myNewBranch を追跡し、リモート追跡ブランチ origin/myNewBranch . を使用するために必要です。 git pushgit pull にプッシュしたりプルしたりする上流を指定しない。

git checkout myNewBranch      # Switch to myNewBranch
git pull                      # Updates remote tracking branch "origin/myNewBranch"
                              # to be in sync with the remote branch "myNewBranch"
                              # on "origin".
                              # Pulls these new commits from "origin/myNewBranch"
                              # to local branch "myNewBranch which you just switched to.