269

リモートブランチを切り替えて追跡するこれら2つのコマンドの違いを知っている人はいますか?

git checkout -b branch origin/branch
git checkout --track origin/branch

どちらもリモート ブランチを追跡しているので、変更をオリジンのブランチにプッシュできると思いますよね?

実際の違いはありますか?

4

4 に答える 4

355

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参照してください)


アップストリーム ブランチをローカル ブランチに登録すると、次のようになります。

  • との 2 つのブランチ間の関係git statusgit branch -vを表示するように git に指示ます。
  • git pull 新しいブランチがチェックアウトされたときに、引数なしでアップストリームからプルするように指示します。

詳細については、「既存の git ブランチでリモート ブランチを追跡するにはどうすればよいですか?」を参照してください。

于 2012-04-03T22:39:05.570 に答える