有人能解释一下应用于git的“跟踪分支”吗?
以下是来自git-scm.com的定义:
Git中的“跟踪分支”是一个本地分支
与远程连接的分支
分支。当你用力拉它的时候
分支,它自动推和
拉到它所在的远端分支
与。
如果你总是从
相同的上游分支进入新的
布兰奇,如果你不想用
"git pull"。
不幸的是,作为git的新手和来自SVN的新手,这个定义对我来说完全没有意义。
我阅读“Git实用指南”(伟大的书,顺便),和他们似乎表明,跟踪分支是一件好事,在创建你的第一个远程(起源,在这种情况下),你应该设置主分支跟踪分支,但不幸的是不包括为什么跟踪分支是一件好事或得到什么好处通过设置你的主分支是一个跟踪分支起源库。
有人能(用英语)给我开导一下吗?
跟踪分支是一种节省我们打字的方法。它还在使用git status和git branch -v时提供了一些额外的细节。
现在让我来解释一下我所说的“节省打字”是什么意思。
如果我们跟踪一个分支,我们不需要总是输入git push origin <branch-name>或git pull origin <branch-name>或git fetch origin <branch-name>或git merge origin <branch-name>。既然我们命名了远程源,我们就可以分别使用git push, git pull, git fetch,git merge。如果我们不命名移除源,我们可以分别使用git push <remote-name>,git pull <remote-name>,git fetch <remote-name>,git merge <remote-name>。
执行git pull will的默认调用相当于git fetch origin HEAD和git merge HEAD,其中HEAD是指向当前分支的ref。
git push命令将当前分支上的所有提交发送到中央存储库。因此,该命令看起来像git push origin <current-branch>
如果我们在一个我们正在跟踪的分支上,简单的短语git merge被认为是git merge origin/<current-branch>。
我们跟踪一个分支,当我们:
使用git Clone克隆一个存储库
使用git push -u origin <branch-name>。这个-u使它成为一个跟踪分支。
使用git branch -u origin/<branch-name> <branch-name>
使用——在签出时跟踪。例:git checkout——track origin/<branch-name>
Pro Go书中提到:
跟踪分支是与远程分支有直接关系的本地分支
不完全是。SO问题“很难理解git-fetch”包括:
没有本地跟踪分支的概念,只有远程跟踪分支。
因此,origin/master是在origin repo中对master的远程跟踪分支。
注意,Git 2.37 (Q3 2022)允许你自动设置远程跟踪分支,包括:
git config --global push.autoSetupRemote true
但实际上,一旦你建立了上游分支关系:
一个地方分支像师父
还有一个远程跟踪分支,比如origin/master
你可以用git branch -avv列出它们。
然后,您可以将master视为一个本地跟踪分支:它跟踪远程跟踪分支原点/master,而master又跟踪上游回购原点的主分支。
换句话说:“远程跟踪分支”中的“远程”意味着远程分支的本地副本(跟踪),以记住最后获取的内容。
Michael Freidgeim在评论中补充道:
术语“远程跟踪分支”令人困惑。
更准确的说法是:
“位于本地的远程跟踪分支”。
否则,有人可能会解释为“远程跟踪分支”位于源服务器上。