リモートブランチを切り替えて追跡するこれら2つのコマンドの違いを知っている人はいますか?
git checkout -b branch origin/branch
git checkout --track origin/branch
どちらもリモート ブランチを追跡しているので、変更をオリジンのブランチにプッシュできると思いますよね?
実際の違いはありますか?
リモートブランチを切り替えて追跡するこれら2つのコマンドの違いを知っている人はいますか?
git checkout -b branch origin/branch
git checkout --track origin/branch
どちらもリモート ブランチを追跡しているので、変更をオリジンのブランチにプッシュできると思いますよね?
実際の違いはありますか?
2つのコマンドは同じ効果があります(指摘してくれたRobert Siemerの回答に感謝します)。
実質的な違いは、別の名前のローカル ブランチを使用する場合に発生します。
git checkout -b mybranch origin/abranch
作成mybranch
して追跡しますorigin/abranch
git checkout --track origin/abranch
' ' のみを作成abranch
し、別の名前のブランチは作成しません。(つまり、Sebastian Grafがコメントしたように、ローカルブランチがまだ存在していない場合。存在する
場合は、が必要になります)git checkout -B abranch origin/abranch
注: Git 2.23 (Q3 2019) では、新しいコマンドgit switch
を使用します:
git switch -c <branch> --track <remote>/<branch>
ブランチが複数のリモートに存在し、そのうちの 1 つが
checkout.defaultRemote
構成変数によって名前が付けられている場合、<branch>
すべてのリモートで一意でなくても、あいまいさを解消するためにそのブランチを使用します。
たとえば、あいまいであるが「元の」リモートに存在するcheckout.defaultRemote=origin
場合、常にそこからリモートブランチをチェックアウトするには、に設定します。<branch>
ここで、' -c
' は新しい ' -b
' です。
まず、いくつかの背景:追跡とは、ローカル ブランチのアップストリームがリモート ブランチに設定されていることを意味します。
# git config branch.<branch-name>.remote origin
# git config branch.<branch-name>.merge refs/heads/branch
git checkout -b branch origin/branch
意思:
branch
によって参照されるポイントを作成/リセットしorigin/branch
ます。branch
( を使用して)ブランチを作成しgit branch
、リモート追跡ブランチを追跡しorigin/branch
ます。 ローカル ブランチがリモート トラッキング ブランチから開始されると、Git はブランチ (具体的には
branch.<name>.remote
およびbranch.<name>.merge
構成エントリ)git pull
をセットアップし、リモート トラッキング ブランチから適切にマージされるようにします。
この動作は、グローバルbranch.autosetupmerge
構成フラグによって変更できます。--track
この設定はおよびオプションを使用してオーバーライドでき--no-track
、後で git branch を使用して変更できます--set-upstream-to
。
そして)git checkout --track origin/branch
と同じことをしますgit branch --set-upstream-to
:
# or, since 1.7.0
git branch --set-upstream upstream/branch branch
# or, since 1.8.0 (October 2012)
git branch --set-upstream-to upstream/branch branch
# the short version remains the same:
git branch -u upstream/branch branch
また、' ' のアップストリームも設定されbranch
ます。
(注: git1.8.0 は廃止されgit branch --set-upstream
、 に置き換えられます: git1.8.0-rc1 Announce をgit branch -u|--set-upstream-to
参照してください)
アップストリーム ブランチをローカル ブランチに登録すると、次のようになります。
git status
git branch -v
を表示するように git に指示します。git pull
新しいブランチがチェックアウトされたときに、引数なしでアップストリームからプルするように指示します。詳細については、「既存の git ブランチでリモート ブランチを追跡するにはどうすればよいですか?」を参照してください。