zl程序教程

您现在的位置是:首页 >  其它

当前栏目

解决no tracked branch的问题,并详说远程分支、远程跟踪分支和跟踪分支【本地分支】

解决 远程 分支 本地 No 跟踪 Branch 问题
2023-09-14 09:07:25 时间

问题

今天我准备从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即可。

这里写图片描述