リモートブランチを切り替えて追跡するこれら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/abranchgit 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 statusgit branch -vを表示するように git に指示します。git pull 新しいブランチがチェックアウトされたときに、引数なしでアップストリームからプルするように指示します。詳細については、「既存の git ブランチでリモート ブランチを追跡するにはどうすればよいですか?」を参照してください。