解决no tracked branch的问题,并详说远程分支、远程跟踪分支和跟踪分支【本地分支】
问题
今天我准备从git代码库中更新代码到我的idea中,突然就报错了:
no tracked branch
翻译为没有跟踪分支
,那么,为什么会出现没有追踪分支
呢?我们不妨分析git的分支
:
- 远程分支
- 远程跟踪分支
- 跟踪分支【本地分支】
分支
远程分支
远程分支对应的英文为remote branch
,其就是在远程仓库的普通分支,比如远程仓库上的master
,自己在远程仓库创建的分支,以及自己推送到远程仓库上去的在远程仓库上的分支。
当运行git push (仓库名)分支名
的命令时,便会在远程仓库创建远程分支。
如下图中的框出的master分支既是远程分支:
远程跟踪分支
远程跟踪分支对应的英文名称为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即可。
相关文章
- Whoops, GitLab is taking too much time to respond.问题解决
- Running Firefox as root in a regular user's session is not supported 问题解决
- 连接远程服务器提示ora 12154,EasyConnect出现ORA-12154(无法解析指定的连接标示符)错误的解决…
- clion连接远程编译环境开发时,头文件标红的解决方法
- 解决RStudio 每次第一句代码出现警告InormalizePath(path.expand(path), winslash, mustWork)[通俗易懂]
- 【已解决】easypoi在导出后Excel中数字不能直接求和。是文本格式。无法求和。怎么解决
- 【Git】Git 分支管理 ( 解决分支合并冲突 | 前置环境准备 | 远程仓库发起分支合并 | 在远程仓库解决分支冲突 | 在远程仓库正式合并分支版本 )
- 解决postgreSql远程连接数据库超时的问题
- 安装VMWare tools,以及解决安装后/mnt中有hgfs但没共享文件的方法详解程序员
- 解决Linux远程登录遇到的问题(linux无法远程登录)
- 出错解决1045远程MySQL出错的方法(1045远程mysql)
- 服务器解决MySQL无法连接远程服务器问题(mysql连接不上远程)
- 解决Linux远程连接无效问题(linux无法远程连接)
- 解决Oracle忘记密码之困(oracle忘记密码)
- 遇到的问题Linux扩展分区:解决遇到的困难(linux扩展分区分区)
- 「如何解决Oracle远程无监听问题」(oracle远程无监听)
- 解决MySQL远程连接问题(mysql远程无法连接)
- Linux下IP命令详解:一次性解决网络问题(linux下ip命令)
- 关系Oracle解决解答:金额大小故事”(oracle金额大小)
- 解决MySQL无法登录问题(无密码)(mysql不用密码怎么办)
- 解决Redis远程连接关闭问题(redis 远程连接关闭)
- Oracle连接超时解决步骤解析(oracle l链接超时)
- MYSQLERROR1045(28000):Accessdeniedforuser(usingpassword:YES)问题的解决
- MySQL不允许从远程访问的解决方法
- mysql解决远程不能访问的二种方法
- 服务器远程超出最大连接数的原因及解决