有人知道这两个命令在切换和跟踪远程分支时的区别吗?
git checkout -b branch origin/branch
git checkout --track origin/branch
我认为两者都跟踪远程分支,所以我可以将我的更改推送到原始分支,对吗?
它们之间有任何实际区别吗?
有人知道这两个命令在切换和跟踪远程分支时的区别吗?
git checkout -b branch origin/branch
git checkout --track origin/branch
我认为两者都跟踪远程分支,所以我可以将我的更改推送到原始分支,对吗?
它们之间有任何实际区别吗?
git checkout -b mybranch origin/abranch
将创建mybranch
并跟踪origin/abranch
git checkout --track origin/abranch
仅会创建'abranch
',而不是具有不同名称的分支。git checkout -B abranch origin/abranch
)
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
配置标志更改此行为。该设置可以通过使用--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
' 的上游。git branch --set-upstream
并替换为 git branch -u|--set-upstream-to
:请参见 git1.8.0-rc1 announce)
将本地分支注册到上游分支将会:
git status
和 git branch -v
中显示两个分支之间的关系。git pull
不带参数 将指向上游分支进行拉取。请参阅 "如何使现有的git分支跟踪远程分支?" 了解更多信息。
完全没有区别!
1)git checkout -b branch origin/branch
如果没有--track
和--no-track
,则默认情况下会假定使用--track
。可以通过设置branch.autosetupmerge
更改默认值。
实际上,1)的行为就像git checkout -b branch --track origin/branch
。
2)git checkout --track origin/branch
“为了方便起见”,省略了-b
的--track
被视为带有-b
,并猜测-b
的参数为“branch”。 猜测由配置变量remote.origin.fetch
驱动。
实际上,2)的行为就像git checkout -b branch --track origin/branch
。
正如您所看到的:没有区别。
但是它甚至变得更好:
3)git checkout branch
如果“branch”不存在但“origin/branch”存在,则也相当于git checkout -b branch --track origin/branch
1。
这三个命令都将“branch”的“upstream”设置为“origin/branch”(或失败)。
上游用作无参数git status
,git push
,git merge
和因此git pull
(如果配置如此(这是默认值或几乎是默认值))的参考点。
例如git status
会告诉您与上游相比落后或超前了多少。
自Git 2.0以来,默认情况下将git push
配置为将当前分支推送到上游2。
1 …如果“origin”是唯一拥有“branch”的远程仓库
2 默认(命名为“simple”)同时强制两个分支名称相同。
该书似乎表明这些命令产生的效果是相同的:
简单示例就是你刚刚看到的,运行 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
)。 - yorchorigin/new-branch
而不是 origin/branch
,你知道吗? - Robert Siemer
git pull
,而有些分支则要求从远程分支拉取。原来,如果你第一次检出同事创建的远程分支,git 会添加branch.<BNAME>.remote=origin
到本地 gitconfig 中。这样就可以使用git pull
命令了。但是,如果你是创建分支的人git checkout -b BNAME
,那么 git 当然不知道。所以你应该指定它的远程分支。 - batilc未找到,但确实存在一个跟踪分支在恰好一个远程(称其为
<remote>)中具有匹配的名称,则视为等效于
$ git checkout -b <branch> --track <remote>/<branch>`” - VonC