有人可以解释“跟踪分支”,因为它适用于git吗?
以下是git-scm.com的定义:
Git中的“跟踪分支”是本地的 连接到远程的分支 科。当你推拉它时 分支,它会自动推送和 拉到它所在的远程分支 与...连接。
如果您总是从中拉出来,请使用此选项 同一上游分支进入新的 分支,如果你不想使用 明确地说“git pull”。
不幸的是,对于git和来自SVN的新手来说,这个定义对我来说完全没有意义。
我正在阅读“The Pragmatic Guide to Git”(顺便说一句好书),他们似乎建议跟踪分支是一件好事,并且在创建第一个遥控器后(原点,在这种情况下) ,您应该将您的主分支设置为跟踪分支,但遗憾的是,它不包括为什么跟踪分支是一件好事或通过设置主分支获得的好处成为原始存储库的跟踪分支。
有人可以赐教(英文)吗?
答案 0 :(得分:96)
ProGit book有a very good explanation:
跟踪分支
从远程分支检出本地分支会自动创建所谓的跟踪分支。跟踪分支是与远程分支有直接关系的本地分支。如果你在跟踪分支上并输入git push,Git会自动知道要推送到哪个服务器和分支。此外,在其中一个分支上运行git pull会获取所有远程引用,然后自动合并到相应的远程分支中。
克隆存储库时,它通常会自动创建跟踪origin / master的主分支。这就是为什么git push和git pull开箱即用而没有其他参数。但是,您可以根据需要设置其他跟踪分支 - 不跟踪原点分支但不跟踪主分支的分支。简单的例子是您刚看到的示例,即git checkout -b [branch] [remotename]/[branch]
。如果你有Git 1.6.2或更高版本,你也可以使用--track
简写:
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "serverfix"
要设置名称与远程分支不同的本地分支,您可以轻松地使用具有不同本地分支名称的第一个版本:
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch refs/remotes/origin/serverfix.
Switched to a new branch "sf"
现在,您的本地分支sf
会自动从origin/serverfix
推送和取消。
答案 1 :(得分:31)
跟踪分支是与远程分支有直接关系的本地分支
不完全是。 SO问题“Having a hard time understanding git-fetch
”包括:
没有本地跟踪分支的概念,只有远程跟踪分支。
因此origin/master
是master
回购中origin
的远程跟踪分支。
但实际上,一旦你在upstream branch relationship之间建立了一个upstream repo
master
origin/master
然后,您可以将master
视为本地跟踪分支:它会跟踪远程跟踪分支 origin/master
,后者跟踪{{3}} origin
的主分支。
答案 2 :(得分:21)
答案 3 :(得分:4)
这就是我添加跟踪分支的方式,以便我可以从中进入我的新分支:
git branch --set-upstream-to origin/Development new-branch
答案 4 :(得分:0)
跟踪分支不过是一种节省我们键入内容的方法。
如果我们跟踪分支,则不必总是键入git push origin <branch-name>
或git pull origin <branch-name>
或git fetch origin <branch-name>
或git merge origin <branch-name>
。 假设我们将远程命名为origin
,我们可以仅使用git push
,git pull
,git fetch
,{{1 }}。
我们在以下情况下跟踪分支机构:
git merge
git clone
时。 git push -u origin <branch-name>
使其成为跟踪分支。-u