问题
今天我准备从git代码库中更新代码到我的idea中,突然就报错了:
no tracked branch
翻译为没有跟踪分支
,那么,为什么会出现没有追踪分支
呢?我们不妨分析git的分支
:
- 远程分支
- 远程跟踪分支
- 跟踪分支【本地分支】
分支
远程分支
远程分支对应的英文为remote branch
,其就是在远程仓库的普通分支,比如远程仓库上的master
,自己在远程仓库创建的分支,以及自己推送到远程仓库上去的在远程仓库上的分支。
当运行git push (仓库名)分支名
的命令时,便会在远程仓库创建远程分支。
远程跟踪分支
远程跟踪分支对应的英文名称为remote-tracking branch
,远程跟踪分支是本地仓库对远程仓库中的某个远程分支的状态的记录,它们以 (远程仓库名)/(分支名)
形式命名。
例如,如果你想要看你最后一次与远程仓库 origin
通信时master
分支的状态,你可以查看 origin/master 分支。
远程跟踪分支的作用是告诉用户其所跟踪的远程分支的状态(即指向哪一个commit),因而它在本地是只读的,用户是无法自行修改它的指向。
其指向将在用户与远程仓库通信时自动改变,这里的通信是指执行诸如git fetch
等从远程仓库获取数据的操作,如下使用git pro书中的例子来进一步讲解:
- 假设你的网络里有一个在
git.ourcompany.com
的 Git 服务器。 - 如果你从这里克隆,Git 的
clone
命令会为你自动将其命名为“`origin“,拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master,这便是指向远程分支master的远程跟踪分支。 - Git 也会给你一个与 origin 的 master 分支在指向同一个地方的本地 master 分支,正是这个本地分支才使得用户可以在本地对master分支进行修改。
跟踪分支
什么是跟踪分支
跟踪分支的英文名称为tracking branch,从一个远程跟踪分支产生出的一个本地分支便是跟踪分支,该本地分支对应的远程跟踪分支称为上游分支。
跟踪分支是与远程分支有直接关系的本地分支
设置跟踪分支
当克隆一个仓库时,它通常会自动地创建一个跟踪 origin/master
的 master 分支。
但是,您可以根据需要设置其他跟踪分支,即不跟踪原点分支也不跟踪主分支的分支。最简单的情况就是运行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并从其中拉出。
跟踪分支的作用
跟踪分支为本地分支和远程分支之间建立了一种联系,方便了远程分支和本地分支的同步。
如果在一个跟踪分支上输入 git pull
,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。
同时,跟踪分支还能查看本地分支与对应的远程分支之间的超前落后情况,如使用git branch -vv
语句,如下所示:
$ git branch -vv
iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets
master 1ae2a45 [origin/master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it
testing 5ea463a trying something new
iss53分支
可看到 iss53
分支正在跟踪origin/iss53
并且 ahead 是 2
,意味着本地有两个提交还没有推送到服务器上。
master分支
可看到 master
分支正在跟踪origin/master
分支并且是最新的。
serverfix分支
可看到serverfix
分支正在跟踪 teamone
服务器上的 server-fix-good
分支并且领先 3 落后 1,意味着服务器上有一次提交还没有合并入同时本地有三次提交还没有推送。
testing分支
最后看到testing
分支并没有跟踪任何远程分支。
定位问题
通过以上的分析可得,如果跟踪分支不存在,我们在新创建分支时,或者更新分支时,就会出现这问题x.x.x has no tracked branch,
既然,知道了问题的所在,我们可以使用设置追踪分支
指令来解决这个问题,如下所示。
解决问题
启动cdm
进入到该项目所在文件夹中,输入这条语句: git branch --set-upstream-to origin/zby zby即可。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/99275.html