3 回答

TA貢獻1799條經驗 獲得超9個贊
這兩個命令具有相同的效果(感謝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(Q9 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>.remote
和branch.<name>.merge
配置條目),從而git pull
將適當地從遠程跟蹤分支合并。
可以通過全局branch.autosetupmerge
配置標志更改此行為??梢允褂?code>--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 顯示在兩個分支之間的關系
git status
和git branch -v
。在檢出新分支時,
git pull
不帶參數的指示從上游拉出。

TA貢獻1851條經驗 獲得超5個贊
您無法使用此命令創建新分支
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

TA貢獻1825條經驗 獲得超4個贊
完全沒有區別!
1) git checkout -b branch origin/branch
如果--track
沒有--no-track
,--track
則假定為默認值??梢允褂迷O置更改默認值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,那也相當于。
所有三個命令都將“branch”的“upstream”設置為“origin / branch”(或者它們失?。?。
上游被用作參數,以下的參考點git status
,git push
,git merge
并因此git pull
(如果配置這樣的(這是默認值或幾乎默認))。
例如git status
,如果配置了上游,請告訴您上游的前后距離。
git push
配置為從git 2.0開始默認將當前分支推送到上游2。
1 ...如果“origin”是唯一具有“branch” 2的遙控器,則默認(名為“simple”)也強制使兩個分支名稱相等
- 3 回答
- 0 關注
- 11031 瀏覽
添加回答
舉報