git:远程分支

本文介绍如何在Git中高效管理分支,包括创建、推送分支的方法,以及如何利用远程分支和跟踪分支进行协作。还介绍了如何通过命令查看分支状态,确保团队成员间的同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

操作总结

有时候我们开发需要开一个分支,这样可以有效的并行开发.

开分支有两种方式:
(1)一种是在远程开好分支,本地直接拉下来;

git checkout -b feature-branch origin/feature-branch    //检出远程的feature-branch分支到本地


(2)一种是本地开好分支,推送到远程.

$  git checkout -b newbranch    //创建并切换到分支newbranch 
$  git push origin newbranch:newbranch    //推送本地的newbranch(冒号前面的)分支到远程origin的newbranch(冒号后面的)分支(没有会自动创建)

远程分支

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

  • 远程跟踪分支是远程分支状态的引用。它们是你无法移动的本地引用。一旦你进行了网络通信,git就会为你移动它们以精确反映远程仓库的状态。
  • 请将远程跟踪分支看做书签,这样可以提醒你该分支在远程仓库中的为止就是你最后一次连接到它们的位置

它们以<remote>/</branch>的形式命名。

  • 如果你想要看你最后一次与远程仓库 origin 通信时 master 分支的状态,你可以查看 origin/master 分支
  1. master 是当你运行 git init 时默认的起始分支名字
  2. origin是当你运行 git clone 时默认的远程仓库名字
  • 你与同事合作解决一个问题并且他们推送了一个 iss53 分支,你可能有自己的本地 iss53 分支, 然而在服务器上的分支会以 origin/iss53 来表示

例子:

  •  假设你的网络里有一个在 git.ourcompany.com 的 Git 服务器。
  • 如果你从这里clone,Git 的 clone 命令会为你自动将其命名为 origin,拉取它的所有数据,创建一个指向它的 master 分支的指针,并且在本地将其命名为 origin/master
  •  Git 也会给你一个与 origin 的 master 分支在指向同一个地方的本地 master 分支,这样你就有工作的基础

  • 如果你在本地的 master 分支做了一些工作,在同一段时间内有其他人推送提交到 git.ourcompany.com 并且更新了它的 master 分支,这就是说你们的提交历史已走向不同的方向。 即便这样,只要你保持不与 origin 服务器连接(并拉取数据),你的 origin/master 指针就不会移动。

  • 如果要与给定的远程仓库同步数据,运行 git fetch <remote> 命令(在本例中为 git fetch origin)。 这个命令查找 “origin” 是哪一个服务器(在本例中,它是 git.ourcompany.com), 从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针到更新之后的位置。

  • 为了演示有多个远程仓库与远程分支的情况,我们假定你有另一个内部 Git 服务器,仅服务于你的某个敏捷开发团队。 这个服务器位于 git.team1.ourcompany.com
  • 你可以运行 git remote add 命令添加一个新的远程仓库引用到当前的项目。 将这个远程仓库命名为 teamone,将其作为完整 URL 的缩写。

  • 现在,可以运行 git fetch teamone 来抓取远程仓库 teamone 有而本地没有的数据。 因为那台服务器上现有的数据是 origin 服务器上的一个子集, 所以 Git 并不会抓取数据而是会设置远程跟踪分支 teamone/master 指向 teamone 的 master 分支

推送

当你想要公开分享一个分支时,需要将其推送到有写入权限的远程仓库上。

本地的分支并不会自动与远程仓库同步,你必须显示的推送想要分享的分支

语法:

git push <remote> <branch>:

例子:

$ git push origin 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

下一次其他协作者从服务器上抓取数据时,他们会在本地生成一个不可以修改的 远程分支origin/serverfix指针,指向服务器的 serverfix 分支的引用:

$ 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

可以运行 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 push origin serverfix的效果和git push origin serverfix:serverfix的效果一样:

  • Git 自动将 serverfix 分支名字展开为 refs/heads/serverfix:refs/heads/serverfix,这表示“推送本地的 serverfix 分支,将其作为远程仓库的 serverfix 分支” 

git push origin serverfix:awesomebranch,表示“推送本地的 serverfix 分支,将其作为远程仓库的 awesomebranch 分支” 

跟踪分支

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

当克隆一个仓库时,它通常会自动地创建一个跟踪 origin/master 的 master 分支。

我们可以使用  git checkout -b <branch> <remote>/<branch> 设置其他的跟踪分支,或是一个在其他远程仓库上的跟踪分支,又或者不跟踪 master 分支。它的快捷方式是--track :

$ git checkout --track 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
Branch sf set up to track remote branch serverfix from origin.
Switched to a new branch 'sf'

现在,本地分支 sf 会自动从 origin/serverfix 拉取。

设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支, 你可以在任意时间使用 -u 或 --set-upstream-to 选项运行 git branch 来显式地设置。

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

当设置好跟踪分支后,可以通过简写 @{upstream} 或 @{u} 来引用它的上游分支。 所以在 master 分支时并且它正在跟踪 origin/master 时,如果愿意的话可以使用 git merge @{u} 来取代 git merge origin/master

如果想要查看设置的所有跟踪分支,可以使用 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 分支正在跟踪 origin/iss53 并且 “ahead” 是 2,意味着本地有两个提交还没有推送到服务器上。 
  • master 分支正在跟踪 origin/master 分支并且是最新的
  • serverfix 分支正在跟踪 teamone 服务器上的 server-fix-good 分支并且领先 3 落后 1, 意味着服务器上有一次提交还没有合并入同时本地有三次提交还没有推送
  • testing 分支并没有跟踪任何远程分支。

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

$ git fetch --all; git branch -vv

拉取

git pull = git fetch  + git merge 

Git - 远程分支

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值