回答:
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(2019年第3四半期)では、新しいコマンド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
なり、次のものに置き換えられgit branch -u|--set-upstream-to
ます:git1.8.0-rc1 announceを参照してください)
ローカルブランチに登録されたアップストリームブランチがあると、
git status
とgit branch -v
。git pull
する新しいブランチがチェックアウトされたときに、上流からプルするします。詳細については、「既存のgitブランチをリモートブランチに追跡するにはどうすればよいですか?」をご覧ください。
If <branch>
が見つかりませんが、<remote>
名前が一致する1つのリモート(これを呼び出す)に追跡ブランチが存在します。$ git checkout -b <branch> --track <remote>/<branch>
"
branch.autoSetupMerge
にalways
私たちが話しているか簡単に実行します。この設定のデフォルトはtrue
です。つまり、リモートブランチをチェックアウトするときにのみ追跡が実行されます。true
ローカルに作成されたブランチの追跡を設定しません。
全然違いはありません!
1) git checkout -b branch origin/branch
no --track
とnoがある--no-track
場合--track
は、デフォルトとして想定されます。デフォルトはの設定で変更できますbranch.autosetupmerge
。
実際には、1)はのように動作しgit checkout -b branch --track origin/branch
ます。
2) git checkout --track origin/branch
「便宜上」は含意--track
せず、への引数は「分岐」であると推測されます。推測は、構成変数によって駆動されます。-b
-b
-b
remote.origin.fetch
実際には、2)はのように動作しgit checkout -b branch --track origin/branch
ます。
ご覧のとおり、違いはありません。
しかし、それはさらに良くなります:
3) git checkout branch
またgit checkout -b branch --track origin/branch
、「branch」がまだ存在せず、「origin / branch」が1の場合も同等です。
3つのコマンドはすべて、「branch」の「upstream」を「origin / branch」に設定します(または失敗します)。
上流の基準点として使用される引数以下git status
、git push
、git merge
従ってgit pull
(デフォルトまたはほぼデフォルトである(そのように設定されている場合))。
たとえばgit status
、上流が設定されている場合、上流または下流の距離を示します。
git push
デフォルトで、現在の分岐上流にプッシュするように構成されている2 gitの2.0から。
1 ...「origin」が「ブランチ」を持つリモートのみである場合
2デフォルト(「シンプル」という名前)は、両方のブランチ名が等しくなるように強制します
本はそれらのコマンドが同じ効果をもたらすことを示しているようです:
単純なケースは、先ほど見た例で、git checkout -b [branch] [remotename] / [branch]を実行しています。Gitバージョン1.6.2以降を使用している場合は、-track短縮形も使用できます。
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'
リモートブランチとは異なる名前でローカルブランチを設定するには、ローカルブランチ名が異なる最初のバージョンを簡単に使用できます。
$ git checkout -b sf origin/serverfix
これは、bashまたはoh-my-zshのgit補完でorigin/serverfix
名前を取得できる場合に特に便利です。追加--track
(または-t
)するだけで、すぐに利用できます。
このコマンドでは新しいブランチを作成できません
git checkout --track origin/branch
ステージングされていない変更がある場合。
次に例を示します。
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: src/App.js
no changes added to commit (use "git add" and/or "git commit -a")
// TRY TO CREATE:
$ git checkout --track origin/new-branch
fatal: 'origin/new-branch' is not a commit and a branch 'new-branch' cannot be created from it
ただし、git checkout -b
次のコマンドを使用すると、ステージングされていない変更を含む新しいブランチを簡単に作成できます。
$ git checkout -b new-branch
Switched to a new branch 'new-branch'
M src/App.js
origin/branch
)を追跡するためのものであることに注意してください
origin/new-branch
代わりにorigin/branch
です。あなたはそれを知っていますか?
git pull
、リモートブランチからのプルを要求するブランチがあったのはなぜかと気になりました。初めて、ピアが作成したリモートブランチをチェックアウトしている場合、gitはbranch.<BNAME>.remote=origin
続行してローカルのgitconfigに追加します。その後、発行することができますgit pull
。しかし、あなたがブランチを作成しているのであればgit checkout -b BNAME
、git-もちろん-は知りません。したがって、リモートを指定する必要があります。