美文网首页
Pro Git 学习笔记 (九, 远程分支)

Pro Git 学习笔记 (九, 远程分支)

作者: 冯斯特罗 | 来源:发表于2017-03-09 14:20 被阅读32次

远程引用是对远程仓库的引用(指针),包括分支、标签等等。 你可以通过 git ls-remote (remote) 来显式地获得远程引用的完整列表,或者通过 git remote show (remote) 获得远程分支的更多信息。 然而,一个更常见的做法是利用远程跟踪分支。

远程跟踪分支是远程分支状态的引用。 它们是你不能移动的本地引用,当你做任何网络通信操作时,它们会自动移动。 远程跟踪分支像是你上次连接到远程仓库时,那些分支所处状态的书签

我个人的理解就是,远程分支不能像操作本地分支一样.虽然存储的位置相同,但是操作命令完全不同.

这可能有一点儿难以理解,让我们来看一个例子。 假设你的网络里有一个在 git.ourcompany.com 的 Git 服务器。 如果你从这里克隆,Git 的 clone 命令会为你自动将其命名为 origin,拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master。 Git 也会给你一个与 origin 的 master 分支在指向同一个地方的本地 master 分支,这样你就有工作的基础。(clone下来之后,创建了两个仓库,一个是本地的master一个是远程的origin/master)

  1. 初始状态


    remote-branches-1.png
  2. 远程仓库和本地仓库均有不同的更新


    remote-branches-2.png
  3. 更新远程仓库
git fetch origin
remote-branches-3.png
  1. 一个多远程库的例子


    remote-branches-5.png

推送

当你想要公开分享一个分支时,需要将其推送到有写入权限的远程仓库上。 本地的分支并不会自动与远程仓库同步 - 你必须显式地推送想要分享的分支。 这样,你就可以把不愿意分享的内容放到私人分支上,而将需要和别人协作的内容推送到公开分支。

如果希望和别人一起在名为 serverfix 的分支上工作,你可以像推送第一个分支那样推送它。 运行 git push (remote) (branch):

$ git push origin serverfix # serverfix 既是本地分支名,又是远程分支名
Counting objects: 24, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (15/15), done.
Writing objects: 100% (24/24), 1.91 KiB | 0 bytes/s, done.
Total 24 (delta 2), reused 0 (delta 0)
To https://github.com/schacon/simplegit
 * [new branch]      serverfix -> serverfix

这里有些工作被简化了。 Git 自动将 serverfix 分支名字展开为 refs/heads/serverfix:refs/heads/serverfix,那意味着,“推送本地的 serverfix 分支来更新远程仓库上的 serverfix 分支。” 我们将会详细学习 Git 内部原理 的 refs/heads/ 部分,但是现在可以先把它放在儿。 你也可以运行 git push origin serverfix:serverfix,它会做同样的事 - 相当于它说,“推送本地的 serverfix 分支,将其作为远程仓库的 serverfix 分支” 可以通过这种格式来推送本地分支到一个命名不相同的远程分支。 如果并不想让远程仓库上的分支叫做 serverfix,可以运行 git push origin serverfix:awesomebranch 来将本地的 serverfix 分支推送到远程仓库上的 awesomebranch 分支。

下一次其他协作者从服务器上抓取数据时,他们会在本地生成一个远程分支 origin/serverfix,指向服务器的 serverfix 分支的引用:
(也就是说,fetch,是将远程仓库的所有分支下载到本地)

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

要特别注意的一点是当抓取到新的远程跟踪分支时,本地不会自动生成一份可编辑的副本(拷贝)。 换一句话说,这种情况下,不会有一个新的 serverfix 分支 - 只有一个不可以修改的 origin/serverfix 指针。

可以运行 git merge origin/serverfix 将这些工作合并到当前所在的分支。 如果想要在自己的 serverfix 分支上工作,可以将其建立在远程跟踪分支之上:

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

这会给你一个用于工作的本地分支,并且起点位于 origin/serverfix。

(这段话的意思是,远程仓库是无法操作的,只能操作本地仓库)
(git checkout -b serverfix origin/serverfix 新用法)

跟踪分支

(所谓跟踪分支就是指绑定了远程分支的本地分支,作用是git pull的时候默认知道从哪里fetch,然后merge到哪里)
手动配置方法:

$ git checkout --track origin/serverfix #方法1 git checkout -b serverfix origin/serverfix的快捷方式
Branch serverfix set up to track remote branch serverfix from origin.
Switched to a new branch 'serverfix'

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

如果想修改:

git branch -u origin/serverfix  # 或 git branch --set-upstream-to origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.
# 当前分支开始跟踪origin/serverfix

如果想要查看设置的所有跟踪分支:

$ git branch -vv
  iss53     7e424c3 [origin/iss53: ahead 2] forgot the brackets # ahead 2 本地早于远程两个提交
  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 # 没有跟踪

需要重点注意的一点是这些数字的值来自于你从每个服务器上最后一次抓取的数据。 这个命令并没有连接服务器,它只会告诉你关于本地缓存的服务器数据。 如果想要统计最新的领先与落后数字,需要在运行此命令前抓取所有的远程仓库。 可以像这样做:$ git fetch --all; git branch -vv

删除远程分支

$ git push origin --delete serverfix
To https://github.com/schacon/simplegit
 - [deleted]         serverfix

相关文章

  • Pro Git 学习笔记 (九, 远程分支)

    远程引用是对远程仓库的引用(指针),包括分支、标签等等。 你可以通过 git ls-remote (remote)...

  • git 删除远程分支

    git 删除远程分支 查看远程分支 git branch -a 删除远程分支 git push origin --...

  • 2018-05-14

    删除远程分支: git push 远程仓库 --delete 远程分支 git push 远程仓库:远程分支 本地...

  • Git之奇淫技巧

    git - 更改本地分支名称 & 远程分支 git - 删除本地分支 & 远程分支

  • git 查看远程分支、本地分支、删除本地分支

    1查看远程分支git branch -a 2查看本地分支git分支 3创建分支git分支测试 4删除远程分支git...

  • git增加远程分支

    查看远程分支 git remote -v 增加远程分支 git remote add 设置远程分支 ...

  • Git 操作

    1. Git 删除本地分支和远程分支 git 删除本地分支:git branch -D git 删除远程分支: g...

  • git命令总结及常见错误处理(一)

    分支 查看本地分支 git branch 查看远程分支 git branch -r 查看本地和远程分支 git b...

  • git常用操作

    更换远程分支先删除远程分支:git remote rm origin再添加远程分支:git remote add ...

  • pull

    git pull <远程主机名> <远程分支名>:<本地分支名> : 将远程分支与本地分支合并。git pull ...

网友评论

      本文标题:Pro Git 学习笔记 (九, 远程分支)

      本文链接:https://www.haomeiwen.com/subject/anjwgttx.html