1. ホーム
  2. ギット

[解決済み】git checkout --track origin/branch と git checkout -b branch origin/branch の違い。

2022-04-18 12:10:43

質問

リモートブランチの切り替えと追跡を行うためのこの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 'であり、異なる名前のブランチではありません。

(つまり コメント通り によって セバスチャン・グラーフ ローカルブランチが ない がすでに存在している。

もし、そうであれば git checkout -B abranch origin/abranch )


注:Git 2.23 (Q3 2019)では、その場合は 新コマンド git switch :

git switch -c <branch> --track <remote>/<branch>

ブランチが複数のリモートに存在し、そのうちのひとつのリモートの名前が checkout.defaultRemote 設定変数があっても、曖昧さ回避のためにそちらを使用します。 <branch> はすべてのリモートで一意ではありません。

などに設定します。 checkout.defaultRemote=origin の場合、常にそこからリモートブランチをチェックアウトします。 <branch> はあいまいですが、'origin' リモートに存在します。

ここで、' -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>.remotebranch.<name>.merge コンフィギュレーション・エントリ) ということで git pull は、リモート追跡ブランチから適切にマージされます。

この動作は、グローバルな branch.autosetupmerge 設定フラグです。この設定をオーバーライドするには --track--no-track オプションで指定し、後で git ブランチを使用して変更しました。 --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 に置き換え、さらに git branch -u|--set-upstream-to : 参照 git1.8.0-rc1 発表 )


ローカルブランチに上流ブランチが登録されることで

  • gitに伝える で2つのブランチの関係を表示します。 git statusgit branch -v .
  • ディレクション git pull 引数なし 新しいブランチがチェックアウトされたときに、上流からプルするために .

"をご覧ください。 既存の git ブランチをリモートブランチに追従させるには? 詳しくは、" をご覧ください。