图解Git——远程分支《Pro Git》

news/2025/1/21 18:26:22/文章来源:https://www.cnblogs.com/cikiss/p/18684133

远程分支

  • 远程引用:
    • 远程引用是远程仓库中分支、标签等的指针,可以通过 git ls-remotegit remote show 查看。
    • 但在日常开发中,更常用远程跟踪分支(如 origin/main)与远程分支交互,简化了对远程仓库状态的管理和使用。
  • 远程跟踪分支: 它是本地 Git 对远程分支状态的一个记录。它可以帮助我们了解远程分支的最新状态,但它本身是只读的,不能直接操作。
    • 示例:
      • 假设远程仓库有一个分支 main
      • 你本地的远程跟踪分支是 origin/main
      • 初次克隆仓库时,origin/main 和远程的 main 同步,指向相同的提交。
      • 如果团队中的其他人向远程的 main 分支提交了新的代码,而你没有运行 git fetchgit pull,你的 origin/main 不会自动更新。
      • 只有当你运行 git fetch 时,origin/main 才会更新,指向远程 main 的最新状态。

1. 远程分支实例

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

    2. 编辑

  1. 本地与远程的工作可以分叉:
    1. 本地的 master分支做了些工作,同时有其他人推送提交到 git.ourcompany.com并更新了 master分支。即使这样,如果你不向 origin拉取数据,你的 origin/master 指针就不会移动。

    2. 编辑

  1. git fetch 更新你的远程跟踪分支:
    1. 运行 git fetch origin 同步远程仓库数据:查找“origin”是哪个服务器(本例中,是 git.ourcompany.com),从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针到更新后的位置。

    2. 编辑

  1. 添加另一个远程仓库:
    1. 为了展示多个远程服务器及其分支的管理,可以为项目添加一个内部开发服务器(如 git.team1.ourcompany.com),专用于某个团队。通过 git remote add 命令,将该服务器添加为远程引用,并命名为 teamone,作为简短标识。

    2. 编辑

  1. 远程跟踪分支 teamone/master
    1. 运行 git fetch teamone ****来获取远程服务器 teamone 上你本地尚未拥有的数据。

    2. 如果该服务器的数据是当前 origin 服务器数据的子集,Git 不会拉取新数据,但会创建一个远程跟踪分支 teamone/master,指向 teamone 的主分支提交点。

    3. 编辑


2. 推送(push)

  1. 分享分支—— git push <remote> <branch>
    1. 可以将本地分支推送到具有写权限的远程仓库。
    2. 推送是显式的,未推送的分支不会同步到远程。这样,你可以保留私人分支,仅共享需要协作的主题分支。
    3. 示例:
      1. git push origin serverfix:将本地分支 serverfix 推送到远程分支 serverfix
      2. 此命令是refs/heads/serverfix:refs/heads/serverfix 命令的简写。
  1. 重命名远程分支—— git push origin serverfix:awesomebranch
    1. 若需要不同的远程分支名称,例如将本地分支 serverfix 推送为远程分支 awesomebranch
  1. 凭据缓存—— git config --global credential.helper cache
    1. 如果使用 HTTPS 推送,Git 会要求输入用户名和密码。为了避免每次都输入,可以设置凭据缓存:
  1. 获取远程分支—— git fetch 可同步远程分支
    1. 示例:git fetch origin 会同步 origin/serverfix 指向远程的 serverfix 分支,但不会自动创建本地分支。
  1. 合并或创建本地分支—— git merge origin/serverfix / git checkout -b serverfix origin/serverfix
    1. 合并远程分支内容: git merge origin/serverfix
    2. 基于远程分支创建可编辑的本地分支: git checkout -b serverfix origin/serverfix创建本地分支 serverfix 并设置与 origin/serverfix 的追踪关系。

3. 跟踪分支

3.1. 跟踪分支的概念

  • 跟踪分支 是与远程分支有直接关系的本地分支。
  • 当你运行 git pull 时,Git 自动识别:
    • 从哪个远程仓库获取数据。
    • 合并到哪个本地分支。

3.2. 跟踪分支的创建

  • 自动创建:
    • 当克隆一个仓库时,master 分支默认会跟踪 origin/master
  • 手动创建:
    • 命令:git checkout -b <本地分支> <远程分支>
    • 简化命令:git checkout --track <远程分支>
    • 再次简化(如果名字唯一匹配):git checkout <远程分支>
  • 重命名本地分支:
    • 命令:git checkout -b <新分支名> <远程分支>

3.3. 管理跟踪分支

  • 设置已有本地分支的跟踪:
    • 命令:git branch -u <远程分支>
  • 检查所有跟踪分支信息:
    • 命令:git branch -vv
    • 包含分支的跟踪状态(领先、落后)。

3.4. 拉取(pull)

  • 基本原理
    • git pull 是一个复合命令,等效于 git fetch(从远程获取最新更新)+ git merge(将更新合并到当前分支)。
    • 它的作用是将远程分支的变化应用到本地分支上。
  • 详细过程
    1. git fetch:从远程仓库获取最新的提交,并将其存储在本地的远程分支(如 origin/master)。
    2. git merge:将这些远程分支的更新合并到当前分支。
  • 推荐用法
    • 为了更清晰控制更新过程,建议手动执行以下步骤:
      1. 使用 git fetch 仅抓取远程更新,不自动合并。
      2. 根据需要决定如何合并(例如使用 git mergegit rebase)。
  • 示例
    • 单独拉取和查看远程分支的变化:
git fetch origin
git log HEAD..origin/master --oneline

    • 合并变化到当前分支:
git merge origin/master

  • 注意事项
    • 如果分支没有设置跟踪关系,git pull 会提示需要指定远程分支。
    • 避免不必要的冲突,尤其是多人协作时,拉取前可以先查看差异。
  • 查看差异:
    • 方法 1:通过 git fetchgit diff 查看差异
      • 先执行 git fetch origin 更新远程分支信息:这只会更新本地的远程跟踪分支(如 origin/master),不会修改当前分支的内容。
      • 使用 git diff HEAD origin/<远程分支名> :查看本地分支与远程分支的差异
    • 方法 2:通过 git log 查看提交历史的差异
      • 如果只关心新增的提交而不是具体的代码变化,可以使用 git log 查看提交历史:
      • 查看远程分支的新增提交git log HEAD..origin/<远程分支名> --oneline
        • HEAD..origin/<远程分支名>:表示显示当前分支落后于远程分支的提交记录。
      • 查看本地分支的新增提交(远程分支未同步的部分)git log origin/<远程分支名>..HEAD --oneline
        • 这可以帮助确认本地分支的哪些提交尚未推送到远程分支。
    • 方法 3:使用 git status 检查是否同步
      • 在设置了跟踪关系的分支上,git status 会显示当前分支与远程分支的同步情况。
    • 方法 4:检查所有分支的同步状态
      • 使用 git branch -vv 查看所有本地分支的状态:
      • 输出示例:
  master    abc1234 [origin/master: ahead 2, behind 3] New feature addeddev       def5678 [origin/dev: behind 1] Bug fixes

      • ahead:本地分支比远程分支多的提交数。
      • behind:本地分支比远程分支少的提交数。
    • 总结
      • 查看修改内容:用 git fetchgit diff
      • 查看提交记录:用 git log
      • 检查同步状态:用 git statusgit branch -vv

3.5. 删除远程分支(git push origin --delete <分支名>

  • 基本原理
    • 远程分支实际上是一个指针,指向仓库中某个提交的引用。
    • 删除远程分支只是移除这个指针,数据会在 Git 服务器上保留一段时间,直到垃圾回收(Garbage Collection,GC)运行。
  • 注意事项
    1. 本地分支保留:该命令只删除远程分支,本地分支仍然存在。
    2. 恢复机制
      • 即使远程分支被删除,其提交记录暂时不会丢失,可以通过 git reflog 找回。
      • 删除是逻辑操作,垃圾回收前数据不会立刻消失。
  • 检查分支状态
    • 使用 git branch -vv 检查本地分支与远程分支的关系,提前确认哪些分支已经同步。

3.6. ⭐远程分支总结

  1. 远程分支概念
    • 远程分支是远程仓库的状态镜像,保存在本地以 <remote>/<branch> 形式表示,如 origin/master
    • 使用 git fetch 更新本地的远程分支状态,但不会修改工作区。
  1. 查看远程分支
    • git ls-remote <remote>:查看远程仓库的所有引用。
    • git remote show <remote>:查看远程分支详细信息。
  1. 推送与拉取
    • 推送git push <remote> <branch> 将本地分支推送到远程分支。
    • 拉取git pull 等效于 git fetch + git merge
    • 建议显式执行 git fetchgit merge 以避免 git pull 的混淆。
  1. 创建跟踪分支
    • git checkout -b <local-branch> <remote>/<branch>:从远程分支创建本地分支并建立跟踪关系。
    • git branch -u <remote>/<branch>:为已有本地分支设置上游分支。
  1. 查看分支状态
    • git branch -vv:查看本地分支与远程分支的跟踪关系及领先/落后状态。
  1. 删除远程分支
    • git push <remote> --delete <branch>:从远程仓库删除分支。

最佳实践

  • 多用 fetch 少用 pull:确保操作的可控性。
  • 定期检查跟踪状态:通过 git fetchgit branch -vv 保持分支状态最新。
  • 推送前检查:确认要推送的内容与远程分支一致,避免冲突。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/872924.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.21 javaweb学习

今天学习了html中onsubmit的使用 onsubmit事件处理器是专门用于表单(form)的提交事件,所以要注意div标签是不能直接使用onsubmit的 今天在作业项目中出现了这样的问题,将onsubmit放在了div标签中,导致数据无法被正常处理,上传数据有误,修改至form后问题解决 修改前数据提…

思通数科舆情系统的分析报告主要内容及其市场价值探析

思通数科舆情系统的分析报告广泛应用于以下几个领域: (1) 企业品牌管理与危机预警:系统能够自动发出警报,为企业的公关部门提供应对策略和决策依据,帮助企业迅速做出反应,避免危机的进一步扩展。 (2) 政府舆情监管与社会治理:政府部门能够利用该系统的热点事件排名、舆情…

北汇信息致客户的一封感谢信

北汇信息致客户的一封感谢信尊敬的客户:感谢您选择北汇信息!2024年是不平凡的一年,中国汽车产量再创新高,出海与内卷挑战不断。北汇信息作为汽车电子测试领域的服务商,秉承“价值创造、共享成功”的理念,一直致力于为国内外汽车客户提供优质的产品和服务,共同面对这些挑…

001 修改博客园侧边栏的顺序

打开配置页:https://i.cnblogs.com/settings在“博客侧边栏公告”添加代码<script> $(document).ready(function(){//returnvar list=[sidebar_recentcomments,//最新评论sidebar_categories,//随笔分类、随笔档案sidebar_toptags,//我的标签sidebar_shortcut,//常用链接…

销售进阶:三步提问法,掌握客户心理

在销售行业,时间就是金钱,我们必须争分夺秒地搞定客户。但也不能盲目行动,而要稳扎稳打。关键在于快速抓住客户需求,而客户往往不会主动透露他们的需求,甚至自己都不清楚自己想要什么。这就需要我们通过巧妙的提问来破局,否则忙活半天也只是白费力气。 最让人头疼的是,跟…

寒假集训笔记 | | 第一课

C++STL --第一课 C标准库常用函数<cstring>memset() 暴力清空 char str[10]; memset(str,0,sizeof(str));<cmath>三角函数、指数函数、浮点取整函数<cstdlib>qsort() C语言快排 rand() 随机数 malloc() free() C语言动态内存分配<cctype>isdigit()…

Svelte 最新中文文档翻译(1)—— 概述与入门指南

前言 Svelte,一个非常“有趣”、用起来“很爽”的前端框架。从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

平面二连杆机构的动力学方程

动力学研究物体的运动和作用力之间的关系。机器人动力学问题有两类:一是已知机器人各关节的驱动力或力矩,求解机器人各关节的位置、速度和加速度,这是动力学正问题;二是已知各关节的位置、速度和加速度,求各关节所需的驱动力或力矩,这是动力学逆问题。机器人的动力学正问…

【红队】C2框架:Covenant

一、项目介绍 Covenant是一个.NET开发的C2(command and control)框架,旨在突出.NET的攻击面,并充当红队成员的协作命令和控制平台,该工具不仅支持Linux,MacOS和Windows,还支持docker容器,最特别的地方是支持动态编译,能够将输入的C#代码上传至C2 Server,获得编译后的文…

3. 使用sql查询csv/json文件内容,还能关联查询?

1. 简介 我们在前面的文章提到了calcite可以支持文件系统的数据源适配, 其实官方已经提供了相应的能力, 其支持csv和json的查询适配, 废话不多说, 直接展示. 2. Maven <!-- calcite文件系统支持 --> <dependency><groupId>org.apache.calcite</groupId>…

一文搞懂 APP 算法备案

今天来给大家好好科普一下超重要的 APP 算法备案,这可是和我们日常使用 APP 以及 APP 运营都息息相关的知识点哦! 什么是算法备案 简单来讲,算法备案就相当于 APP 运营者要把自家 APP 里使用的算法详情,向有关部门进行申报登记。这就如同给算法这个 “幕后大脑” 办一张正式…

IDEA 在远程 Tomcat 上运行项目(转载补充版)

转载:IDEA 在远程 Tomcat 上运行项目(亲身避坑版) 我在操作的时候,遇到个问题,提示Unable to open debugger port (192.168.252.232:54578): java. net. ConnectException "Connection refused: connect" 原因是,开启JVM调试,需要在2.1小节设置环境变量的时候…