Git   发布时间:2022-05-05  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Git 系列教程(14)- 远程分支大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

远程分支

远程引用是对远程仓库的引用(指针),包括分支、标签等等@H_675_4@

你可以通过 git ls-remote <remote> 来显式地获得远程引用的完整列表@H_675_4@

polo@B-J5D1MD6R-2312 watermarker % git ls-remote
From git@gitee.com:poloyy/watermarker.git
3fb14343217ff0725bbf68f9a1b5f36fa650548f    HEAD
3fb14343217ff0725bbf68f9a1b5f36fa650548f    refs/heads/@H_891_15@master
7fa175dbc2a1ce3cec03033472abb894f1a94527    refs/tags/TESTBu
8be5ab723bc931dcae3cd9a2bccaca8b474e962b    refs/tags/v1.1
9BACa61910f4182075c753a4bb9eedba5af8cb02    refs/tags/v1.1

 @H_675_4@

或者通过 git remote show <remote> 获得远程分支的更多信息@H_675_4@

polo@B-J5D1MD6R-2312 watermarker % git remote show origin
* 远程 origin
  获取地址:git@gitee.com:poloyy/watermarker.git
  推送地址:git@gitee.com:poloyy/watermarker.git
  HEAD 分支:master
  远程分支:
    master 已跟踪
  为 'git pull' 配置的本地分支:
    master 与远程 master 合并
  为 git push 配置的本地引用:
    master 推送至 master (最新)

 @H_675_4@

远程跟踪分支

  • 远程跟踪分支是远程分支状态的引用
  • 一旦你进行了网络通信, Git 就会为你移动它们以精确反映远程仓库的状态
  • 该分支在远程仓库中的位置就是最后一次连接到它们的位置

 @H_675_4@

命名格式

 <remote>/<branch> 

 @H_675_4@

查看最后一次与远程仓库 origin 通信时 @H_420_6@master 分支的状态@H_675_4@

origin/master 

你与同事合作解决一个问题并且他们推送了一个 iss53 分支,你可能有自己的本地 iss53 分支, 然而在服务器上的分支会以 origin/iss53 来表示@H_675_4@

 @H_675_4@

为何叫 origin? 

  • giit clone 命令会给远程仓库认命名为 origin,然后拉取它的所有数据, 创建一个指向它的 @H_420_6@master 分支的指针,并且在本地将其命名为 origin/master【远程分支 origin/master】
  • Git 也会给你一个与 origin 的 @H_420_6@master 分支在指向同一个地方的本地 @H_420_6@master 分支,这样你就有工作的基础【本地分支 master】

 @H_675_4@

重点

  • origin 和 master 一样,没有特殊的含义
  • 只是 git init 时认的起始分支名字取得就是 master
  • 而 git clone 认给远程仓库名字取得就是 origin

假设指定远程仓库名字@H_675_4@

 git clone -o booyah

 @H_675_4@

那么认的远程分支名字就是 booyah/master@H_675_4@

Git 系列教程(14)- 远程分支@H_675_4@@H_675_4@@H_675_4@

 @H_675_4@

克隆之后的远程仓库与本地仓库

  • 有人在 git.ourcompany.com 的 master 分支上 push 了新的提交
  • 而自己在本地的 master 分支上也做了提交但是没有 push
  • 只要本地不拉取最新的数据,那么本地的远程分支(origin/master)还是指向之前的 f4265 节点

Git 系列教程(14)- 远程分支@H_675_4@@H_675_4@@H_675_4@

 @H_675_4@

本地与远程的工作可以分叉

将本地的远程仓库和服务器上的远程仓库同步数据@H_675_4@

git fetch <remote>
git fetch origin
  • 这个命令查找 “Origin” 是哪一个服务器(在本例中,它是 git.ourcompany.com
  • 从中拉取本地没有的数据,并且更新本地数据库
  • 移动 origin/master 指针到更新之后的位置

Git 系列教程(14)- 远程分支@H_675_4@@H_675_4@@H_675_4@

可以看到,因为本地的 master 分支已经有过新的提交,所以和 origin/master 远程分支处于分叉状态@H_675_4@

 @H_675_4@

git fetch 更新你的远程跟踪分支

现在有个新的 git 服务器位于 git.team1.ourcompany.com@H_675_4@

当有多个远程仓库与远程分支的情况下,要怎么添加新的远程仓库引用到本地项目呢?@H_675_4@

git remote add <remote> <git 服务器 url

Git 系列教程(14)- 远程分支@H_675_4@@H_675_4@@H_675_4@

 

添加一个远程仓库

抓取新添加的远程仓库在本地没有的数据@H_675_4@

git fetch teamone
  • 因为那台服务器上现有的数据是 origin 服务器上的一个子集,
  • 所以 Git 并不会抓取数据而是会设置远程跟踪分支 teamone/master 指向 teamone 的 @H_420_6@master 分支。

Git 系列教程(14)- 远程分支@H_675_4@@H_675_4@

 

推送至远程跟踪分支 teamone/master

推送本地指定分支的内容到指定的远程仓库下
git push <remote> <branch>:

 @H_675_4@

栗子

将本地的 serverfix 分支推送到远程仓库上的 awesomebranch 分支@H_675_4@

git push origin serverfix:awesomebranch

 @H_675_4@

下一次其他协作者从服务器上拉取数据时,他们会在本生成一个远程分支 origin/serverfix,指向服务器的 serverfix 分支的引用:@H_675_4@

$ git fetch origin
remote: CounTing objects: 7,done.
remote: Compressing objects: 100% (2/2),1)">.
remote: @R_960_10586@l 3 (delta 0),reused 0)
Unpacking objects: 3/3),1)">.
From https://github.com/schacon/simplegit
 * [new branch]      serverfix    -> origin/serverfix

这样操作,本地不会自动新增一个 serverfix 分支,只是有一个不可修改的 origin/serverfix 指针@H_675_4@

 @H_675_4@

git merge origin/serverfix 

这也是将 origin/serverfix 远程分支下的内容合并到本地当前所在分支@H_675_4@

 @H_675_4@

$ git checkout -b serverfix origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch serverfix' 

这样可以在本地新建一个 serverfix 分支,并且和 origin/serverfix 远程分支指向同一个提交内容@H_675_4@

 @H_675_4@

跟踪分支

  • 一个远程跟踪分支 checkout 一个本地分支会自动创建所谓的“跟踪tracking分支”(它跟踪的分支叫做“上游 upstream 分支”)
  • 跟踪分支是与远程分支有直接关系的本地分支
  • 如果在一个跟踪分支上输入 git pull,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支

 @H_675_4@

-u 或 --set-upstream-to 

将本地分支跟踪一个刚拉取下来的远程分支,或者修改正在跟踪的上游分支@H_675_4@

$ git branch -u origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.

 @H_675_4@

查看设置的所有跟踪分支

这会将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。
$ git branch -vv
  iss53     7e424c3 [origin/iss53: ahead 2] forgot the brackets
  master    1ae2a45 [origin/@H_891_15@master] deploying index fix
* serverfix f8674d9 [teamone/server-fix-good: ahead 3,behind 1] this should do it
  tesTing   5ea463a trying something new
  • iss53 分支正在跟踪 origin/iss53 并且 “ahead” 是 2,本地有两个提交还没有推送到服务器上【领先两个提交】
  • @H_420_6@master 分支正在跟踪 origin/master 分支并且是最新的【 [] 里面没有其他提示
  • serverfix 分支正在跟踪 teamone 服务器上的 server-fix-good 分支并且领先 3 落后 1,服务器上有一次提交还没有合并入同时本地有三次提交还没有 push
  • tesTing 分支并没有跟踪任何远程分支【没有 [] 】

 @H_675_4@

重点注意

  • git branch -vv 显示的值来自每个服务器最后一次拉取数据(git fetch)
  • 这个命令并没有连接服务器,它显示本地缓存的服务器数据
  • 如果想要统计最新的 ahead 与 behind 数字,可以先拉取所有服务器的最新数据
git fetch --all
git branch -vv

 @H_675_4@

拉取

git fetch 命令从服务器上抓取本地没有的数据时,它并不会修改工作目录中的内容,它只会获取数据然后让你自己合并@H_675_4@

 @H_675_4@

git pull 命令等价于

git fetch
git merge

 @H_675_4@

删除远程分支

当某个远程分支已经做完所有工作,且把该分支的内容合并到了 master 分支(或其他稳定版本分支),就要删除不再需要的远程分支@H_675_4@

$ git push origin --delete serverfix
To https:github.com/schacon/simplegit
 - [deleted]         serverfix
  • 基本上这个命令做的只是从服务器上移除这个指针
  • Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的

 @H_675_4@

大佬总结

以上是大佬教程为你收集整理的Git 系列教程(14)- 远程分支全部内容,希望文章能够帮你解决Git 系列教程(14)- 远程分支所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: