“分支”到底是什么意思?

2024-04-30

长话短说...

据我所知,术语“分支”(Git 术语)可能指的是相关但不同的事物:

  1. 指向提交的非符号引用/指针,
  2. 此类引用的名称(例如“master”),
  3. 存储库提交 DAG 的子图,由此类引用所指向的提交可到达的所有提交组成。

然而,我发现这个术语显然指的是这三种可能的用法之外的东西(更多细节见下文)。在 Git 上下文中,我上面的列表中是否缺少术语“分支”的其他有效且明确的用法?

更多细节

使用 Git 大约一年后,我正在为 CS 学生准备一个简短的教程。我真的很想明确 Git 术语,以避免任何混乱。

当然,我已经使用 Git 分支有一段时间了;我很喜欢使用它们,并且发现 Git 分支模型很棒。然而,我仍然发现术语“分支”有问题且含糊不清,因为它似乎指的是至少两个不同的事物,具体取决于它使用的上下文......有时甚至在同一个教程/手册中。

用法 1:分支 = 提交的指针/引用

Pro Git 书(在3.1 - 什么是分支 http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is),显示下图后,

继续将分支定义为

只是一个指向这些提交之一的轻量级可移动指针。

据我所知,这也是 Git 手册页中“分支”的含义。

我对这个定义非常满意。我认为分支只是指向 DAG 中特定提交的引用,而分支的“尖端提交”是该引用指向的提交。到目前为止,一切都很好。可是等等...

用法 2:分支 = DAG 的子图

The Atlassian Git 教程 https://www.atlassian.com/git/tutorial/git-branches#!branch介绍分支如下:

一个分支代表一条独立的开发线。

我猜他们的意思是一串提交。让我完善这个想法......对我来说唯一有意义的解释是术语“分支”也可以指代存储库提交 DAG 的子图,由所考虑的提示提交可到达的所有提交组成.

然而,例如,Pro Git 书籍还包含以下图表(请参阅3.4 - 分支工作流程 http://git-scm.com/book/en/Git-Branching-Branching-Workflows),

这似乎与我的解释相矛盾,因为它似乎意味着只承诺C2-C5 (not C1)属于develop分支,并且只提交C6-C7 (not C1-C5)属于topic分支。

我发现这种用法含糊不清,因为如果我在那个阶段绘制 DAG,而不知道分支引用过去指向哪里,并且不假设三个分支之间有任何层次结构,我会得到的只是

我还发现其他 Git 学习资源中的一些图表令人困惑。特别考虑以下内容(取自介绍视频)Lynda.com - Git 基本培训 http://www.lynda.com/Git-tutorials/Git-Essential-Training/100222-2.html):

在这里,提示master is actually 534de (and HEAD指着master),但是图中“master”标签的位置非常具有误导性。我不清楚在这种情况下该标签应该描述什么......

Edit: 我后来发现了这个Marc 博客上的优秀帖子 http://longair.net/blog/2009/04/16/git-fetch-and-merge/; the Branches部分呼应了我上面的言论。


你是对的。

我们可以通过分隔“本地”和“远程”分支标签来进一步拆分项目 1:本地分支(本地标签)是以下名称开头的名称(在内部,许多前端命令隐藏此名称):refs/heads/,而“远程分支”(也称为“远程跟踪分支”)以refs/remotes/然后在命名分支的部分之前再添加一个路径组件来命名特定的远程。 (2018 年 4 月编辑:我不喜欢“远程分支”或“远程跟踪分支”这个短语;我认为最好直接调用这些远程跟踪名称。但是有很多现有文档使用了其他两个短语,因此我们需要注意这种用法。)

例如,您无疑熟悉refs/remotes/origin/master,但是如果你有一个名为bob你可能还有refs/remotes/bob/hacks/feep跟踪鲍勃的hacks/feep.

本地分行名称refs/heads/branch其显着特点是git checkout默认情况下,通过将该名称写入特殊的分支,会将您“置于”该分支上HEAD参考;一旦你以这种方式设置,新的提交(由git commit, git merge, git cherry-pick等)导致新提交的 SHA-1 被写入分支文件。 (新的提交将旧的分支尖端作为其父项或父项之一。)

我尝试使用“分支提示”之类的术语来专门表示分支名称之类的提交refs/heads/master点,“分支名称”或“本地分支名称”来引用名称本身(无论是否带有前缀)refs/heads/或不),以及——我认为这是最不成功的——“分支结构”来指代 DAG 子集。然而,给定一个具有如下分叉合并的 DAG:

         o--o
        /    \
...-o--o      o--o-...
        \    /
         o--o

有时我也想将这个类似苯环的小物体的一个或另一半称为“分支”,但我对此没有很好的术语。

(顺便说一句,如果你是一名拓扑学家,Atlassian 图也可以线性绘制这一事实不会困扰你。然而,正如一个老笑话所说,拓扑学家一直试图用甜甜圈喝水,吃咖啡杯,因为每一个只是一个环面。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“分支”到底是什么意思? 的相关文章

  • 是否存在比 SVN 更快的集中版本控制?

    我已经使用 SVN 很长时间了 现在我们正在尝试使用 Git 我在这里谈论的不是中心化 去中心化的争论 我唯一关心的是速度 后一个工具要快得多 但有时 我需要使用一种集中式方法 这种方法比分散式方法更简单 更简单 学习曲线非常快 这节省了大
  • 警告:您的 git 版本是 1.9.3。存在严重的安全漏洞

    我在部署到 Heroku 期间收到有关 git 1 9 3 严重安全漏洞的警告 我尝试通过 homebrew 更新 git 但发现 git 最初并不是通过 homebrew 安装的 然后我通过自制程序安装了它 brew update bre
  • 使用 TFS 个人访问令牌克隆 Git 存储库

    我正在尝试以编程方式克隆 git 存储库 我的 ASP NET MVC 应用程序正在创建并启动一个进程 处理进程的代码工作正常 但是当尝试使用本地 TFS PAT 克隆 git 存储库时 身份验证失败 我无法使用 NTLM 或要求用户输入凭
  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外
  • Git 不断提示我输入密码

    我已经使用 Git 一段时间了 但是不断要求输入密码开始让我感到厌烦 我使用的是 Mac OS X 和 GitHub 并且按照 GitHub 的说明设置了 Git 和我的 SSH 密钥设置 Git 页面 http help github c
  • Git:如何变基到特定提交?

    我想变基到特定的提交 而不是另一个分支的 HEAD A B C master D topic to A B C master D topic 代替 A B C master D topic 我怎样才能做到这一点 您可以通过在您喜欢的提交上创
  • git diff 在尖括号中显示 unicode 符号

    我有一个带有 unicode 符号 俄语文本 的文件 当我修复一些拼写错误时 我使用git diff color words 看看我所做的改变 如果是 unicode 西里尔文 符号 尖括号会造成一些混乱 如下所示 cat p1 cat p
  • 重新打包存储库对于大型二进制文件有用吗?

    我正在尝试将大量历史记录从 Perforce 转换为 Git 并且一个文件夹 现在是 git 分支 包含大量大型二进制文件 我的问题是运行时内存不足git gc aggressive 我的主要问题是重新打包存储库是否可能对大型二进制文件产生
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • 分支明显不同,但提交历史是相同的

    git status告诉我我的分支和我在另一个存储库上开始的分支已经分歧 On branch master Your branch and origin master have diverged and have 13 and 13 dif
  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • 如何从 android.googlesource.com 或 github.com 下载单个目录?

    我想下载 https android googlesource com platform frameworks base git master tools aapt https android googlesource com platfo
  • git diff - 只显示哪些目录发生了变化

    有没有办法只列出已更改的目录 如果我在 git root 的话 project 我更改的文件是 project subtool file1 project subtool file2 project subtool3 file1 我只是想
  • 什么是 API 密钥? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如今 我几乎在每个跨服务应用程序中都看到这个词 API 密钥到底是什么以及它的用途是什么 另外 公共 API 密钥和私有 API 密钥
  • 为什么我无法创建/签出该分支?

    我正在尝试创建本地 Git 分支 但它不起作用 以下是我正在使用的命令 tablet edit11 git checkout b edit 11 Switched to a new branch edit 11 tablet edit11
  • git Push over sshfs 失败,并显示“关闭 sha1 文件时出错:错误的文件描述符”

    我们使用 sshfs 通过 SSH 安装文件系统 并将其用作 git 存储库协作的远程存储 Mac OSX 10 6 6 到 RHEL 3 服务器 SSHFS 版本 2 2 MacFUSE SSHFS 2 2 0 MacFUSE 库版本 F
  • 自动将所有 GitHub 存储库镜像到 gitlab

    对于 GitLab 必须手动为每个存储库设置拉 推镜像 我想知道那里有any way可以自动将所有 Github 存储库同步到 GitLab 这样 当您在 GitHub 中创建新的存储库时 GitLab 中的存储库将自动创建 并充当拉取镜像
  • 格里特:! [远程拒绝] HEAD -> refs/publish/master (没有新的更改)

    我做了一些更改 提交了它们并将分支推送到 Gerrit git push gerrit 现在我的更改没有出现在 Gerrit 中 我认为这是因为我手动推送更改而不是使用git 审查 https github com openstack in
  • apt-get 无法在 ubuntu dockerfile 中工作

    我对 docker 相当陌生 正在尝试通过编写自己的镜像来学习 并且目前正在阅读 Docker 的实际操作 ISBN 1633430235 在我自己的代码和书中的示例 第 146 页 中 我想通过 dockerfile 安装 git My

随机推荐

  • asp和iis 6.0从哪里获取其日期格式

    我发现了一个带有新网络服务器的小泡菜 我们有一个新的网络服务器 它显示的日期与我们旧的网络服务器不同 我们在 Windows Server 2003 的 IIS 6 0 上运行 asp 经典网页 我们以管理员身份登录并设置适当的区域设置 然
  • Python 模块导入对一个文件有效,对另一个文件则失败

    我面临着一个非常奇怪的问题 我有三个文件 第一个包含基类 其他两个文件中的类继承自该基类 奇怪的是 昨天一切都工作正常 但今天其中一个文件不再工作了 在此期间我还没有接触过进口 orangecontrib init py prototype
  • 在 Linq 中添加对 XML 文档的样式表引用?

    我创建了一个 XML 文档 并希望获得对 XSLT 文件的引用 到此 XML 生成 XElement xml new XElement ReportedOn from dl in EL DocumentLog ToList join o i
  • MVC 模型在 OnExecuted 操作过滤器中为 null ...或者设置模型的更优雅的方式?

    我有一个 ActionFilter 它覆盖了 OnActionExecuted 方法 在 POST 操作中 filterContext Controller ViewData Model 始终为 null 我确实发现下面的文章似乎在说它不应
  • OrderBy / ThenBy 循环 - C# 中的嵌套列表

    我有一个嵌套列表 List
  • 在集线器外部获取 SignalR 用户 (Hub.Context)

    有没有办法在集线器之外获取当前的 signalR 请求用户 我可以在集线器方法内部使用 Hub Context User 但是如果集线器方法调用任何其他底层 Wcf 服务调用 附加的BehaviorExtensionElement 用于添加
  • Java Web 启动和安全性

    刚刚有人向我指出 我的博客中的 Java Web Start 应用程序 例如我的按键绑定 http tips4java wordpress com 2008 10 10 key bindings 条目 由于以下安全错误而不再起作用 经过一些
  • 如何将 UTC 日期时间转换为另一个时区?

    我怎样才能转换这样的日期 2012 07 16 01 00 00 00 它在UTC 00 00时区 到UTC 04 00时区 确保正确处理夏令时 Use DateTime http php net manual en class datet
  • 检测 vb.net 中的浏览器关闭事件

    我的网页如下所示
  • 如何使用 Trie 进行拼写检查

    我有一个根据单词词典构建的特里树 我想用它来进行拼写检查 并建议字典中最接近的匹配项 也许对于给定数量的编辑x 我想我会在目标单词和字典中的单词之间使用 levenshtein 距离 但是有没有一种聪明的方法可以遍历 trie 而不需要对每
  • 找不到 R.layout.activity_main

    我试图使用一些在线教程来解决多种布局 问题是只要只有一个 XML 文件 我的程序就可以正确构建和编译 当我添加多个 XML 文件时 我收到错误消息 指出该行的 activity main 无法解析或不是字段 setContentView R
  • 无法从 GetProcessId(.. hWnd) (pInvoke) 中提取 processID

    我使用以下方法 DllImport kernel32 dll SetLastError true static extern int GetProcessId IntPtr hWnd 尝试获取正在运行的进程的 processId 我拥有的唯
  • 在应用商店上发布 PWA:google play 和 ios itunes

    有没有办法在应用商店上发布 PWA 来发布应用 谷歌播放和 iOS iTunes 不用用科尔多瓦制造一辆越野车 这会带来大量的维护问题 是的 有办法将您的 PAW 发布到 Android 应用商店 TWAs可信 Web 活动是一种使用基于自
  • MySQL - 选择字符串的前 10 个字节

    各位聪明的男士女士们 大家好 如何选择字符串的前 x 个字节 用例 我正在优化产品描述文本以上传到亚马逊 亚马逊按 utf8 中的字节 不是我之前所说的 latin1 而不是字符来测量字段长度 另一方面 MySQL 似乎是基于字符进行操作的
  • 两个 primefaces 日历组件验证

    我有一个表格JSF 2我使用双字段来指定日期范围 这样做的目的是不让用户选择第二个日期之前的第一个日期 所以我想在发送表单之前执行验证 使用p calendar成分 我所做的是将验证器绑定到第二个日历输入 以便在内部访问第一个组件并比较日期
  • 测试 powermock 模拟客户端调用的 http 服务器超时

    我需要为 connectTimeout 和 SocketTimeout 异常编写测试用例 我使用 powerMock 创建模拟对象 下面是我的代码 但是我的模拟对象出现空指针异常 任何帮助表示赞赏 package com util impo
  • 如何使用 JSON 和 Perl (HTML::Mason) 通过 AJAX 创建动态网页?

    我对处理 Javascript JSON 和 Peel 的方式感到有些困惑 而且大多数示例都是 PHP 语言 这对我没有帮助 我有一个页面 称为 main html 其中包含来自 MySQL 的数据 并且可以选择按 id 删除行 然后我让
  • 如何使用可滑动选项卡实现 PageTransformer

    在我的示例代码中 我在 MainActivity java 中有三个可滑动选项卡 即 Android IOS 和 WINDOWS 我使用滑动在选项卡之间切换 现在 我必须使用可滑动选项卡实现 PageTransformer 所以这里我需要您
  • Yii:如何用另一个模型数据填充选择输入?

    我正在玩一个小应用程序以学习使用 Yii 我创建了一个小型网络应用程序 其中包含 2 个模型 表 项目和任务 一对多关系 在模型类中正确配置 我现在尝试自定义任务 创建视图 用建议可用项目列表的选择框替换文本输入字段 我打开表单视图并尝试了
  • “分支”到底是什么意思?

    长话短说 据我所知 术语 分支 Git 术语 可能指的是相关但不同的事物 指向提交的非符号引用 指针 此类引用的名称 例如 master 存储库提交 DAG 的子图 由此类引用所指向的提交可到达的所有提交组成 然而 我发现这个术语显然指的是