git log --oneline --graph 输出的含义

2024-04-27

我正在学习相对提交引用并尝试理解以下内容git log --oneline --graph课程中提供的输出。

在课程中它说给定的 HEAD 指向9ec05ca提交,HEAD^^^(意思是曾祖父母提交)是0c5975a犯罪。但在我看来4c9749e如果每个 SHA 都是其下一个 SHA 的直系后代,则应该是曾祖父母。任何澄清表示赞赏。


setia_ 的答案仍然是最合适的,但你的问题是有意义的,因为 git 历史可以从两个不同的角度来考虑:要么你完全将它视为一个(数学)图,其中父级的顺序应该不重要,要么你考虑合并将外部分支集成到公共主干(即您当前的分支,通常是“主分支”)中的操作。这也是作者做出的假设git merge.

这很重要,不仅因为快速浏览呈指数增长的树变得很痛苦,而且因为拥有包含成品并集成外部提交的分支“主”是许多工作流程遵循的模型。

由于这两种观点都有道理,因此--first-parent成为经常使用的选项,尽管不是主命令也不是默认行为。

例如,使用简单的命令浏览 Linux 内核主存储库(Git 最初是为此设计的)git log --graph显示某些内容最多可能需要一分钟,但是git log --graph --first-parent将向您显示主分支,并让您观察到它主要由合并组成,偶尔有直接提交。

另一件必须记住的事情是,您可以要求使用按时间顺序显示您的提交--date-order或拓扑顺序--topo-order。假设您有两个不同的分支,并在最终合并它们之前选择其中一个或另一个。根据顺序,生成的图表将类似于以下之一:

Chronological order                     Topological order

*   ec9a124 Merge branch 'B' into A     *   ec9a124 Merge branch 'B' into A
|\                                      |\
* | e5314f2 Ninth                       | * e3e2435 Eighth
| * e3e2435 Eighth                      | * af3bac5 Sixth
* | 308228b Seventh                     | * 3a2f0b9 Fourth
| * af3bac5 Sixth                       | * d901c9f Second
* | ab11578 Fifth                       * | e5314f2 Ninth
| * 3a2f0b9 Fourth                      * | 308228b Seventh
* | 344bd0f Third                       * | ab11578 Fifth
| * d901c9f Second                      * | 344bd0f Third
|/                                      |/
* 0f029bc First                         * 0f029bc First

所有提交都保留在各自的行上,但后者是深度优先搜索。自从git log(也是如此git rev-list)显示预先收集的修订版本的集合,无论您使用的是--graph或将它们显示为平面列表(实际上,如果没有指定,git log默认使用逆时间顺序,使用时按拓扑顺序--graph).

因此,您不能简单地依赖第一行来决定选择哪个父级。

这也可能导致一些较旧的提交出现在新的提交之前,这在开始使用 Git 时可能会非常令人困惑,并给您留下您的工作已经消失的印象(直到有人想到执行搜索,然后将其检索埋藏)历史上的某个地方)。

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

git log --oneline --graph 输出的含义 的相关文章

  • 将生成的文件存储在 Git 中

    我们有一个相当大且过于混乱的代码库 我们希望使用 Git 进行迁移 目前 它是一个大的整体块 不能轻易地分割成更小的独立组件 该代码构建了大量共享库 但它们的源代码如此交错 目前无法将其干净地分离到单独的存储库中 我不太关心 Git 是否可
  • 如何在 NetBeans 中执行“git Blame”?

    NetBeans 内置了对 git 的支持 我可以做一个git blame在 NetBeans 内 如果是这样 怎么办 I googled https www google nl search q netbeans git blame它 但
  • 如何从 Visual Studio 2013 将现有解决方案添加到 GitHub

    我浏览了许多关于 VS 2013 中新的 Git 集成的网页 它们不涉及向 Github 添加现有解决方案 事实上 我找不到太多关于使用 GitHub 而不是 Visual Studio Online 的信息 谁能告诉我如何从现有解决方案开
  • git clean -ndX 不会删除目录

    With gitignore foo 和一个 git 存储库 quux quux foo quux foo bar quux foo bar baz As foo被忽略 git 假设工作目录是干净的 git status On branch
  • 将两个相似的远程 git 存储库合并为一个

    我已经做了一些搜索并阅读了 git 书籍和网络上的一些地方 例如 git 但我找不到正确的方法来做到这一点 我有两个 git 存储库 位于两台不同的机器上 这些 git 存储库中的每一个都保存程序的配置 当您比较两个存储库时 配置的某些部分
  • 添加和提交文件后Git推送不起作用

    I m new to Github and Git tried to use gitbash on Windows After adding and committing files If I add the git push cmd Th
  • 樱桃选择问题:还应用了之前提交的更改

    在我的项目中 我几个月前发布了一个版本 在该版本发布之后 我在 master 分支上做了很多更改 如果我遇到上一个版本中存在的一些错误 我会在主分支上修复它们 然后将它们挑选到我在上一个版本中创建的分支 然后我可以提供一个仅包含错误修复的新
  • 无法通过 HTTPS 克隆私有 Github 存储库

    我在通过 HTTPS 克隆私有 GitHub 存储库时遇到问题 如果我尝试使用以下方式克隆我的存储库 git clone https github com username repository 我收到错误 fatal remote err
  • 在家庭和办公室进行开发,GIT 会比使用 xcopy 的 SVN 更容易吗?

    如果出于安全原因 源代码只能存储在我的家庭计算机和办公室计算机上 如果传输代码的唯一方法是 USB 密钥 那么哪种源代码控制是最好的 SVN还是GIT 注意 两台计算机之间没有网络连接 我推荐git 无论哪种方式 您都需要 USB 密钥上的
  • GIT Rebase 对多个 0.5GB 二进制文件致命

    这个问题本质上是重新开rebase 期间 git 崩溃 https stackoverflow com q 7692944 1286639从来没有答案 我正在尝试从我的 secc 分支进行变基 git rebase main First r
  • 没有共同的参考文献,也没有指定;什么也不做

    我有一个本地 git 项目 我想将其添加到 gitolite 中 显然这很难 所以我放弃了这个想法 我创建了一个新的 gitolite 存储库 将其添加到 gitolite admin conf gitolite conf 并提交并推送更改
  • BitBucket+Jenkins:仅在特定分支更改时触发构建

    以下是该问题的据称解决方案 尽管它看起来确实是一种解决方法 而不是最终的解决方案 有没有一种方法 通过作业配置或 bitbucket 挂钩配置 我可以将作业设置为仅在推送到特定分支时运行构建 是否可以仅从一个特定分支触发 Jenkins h
  • 如何列出当前正在验证的拉取请求中更改的所有文件(在 VSTS 中)?

    我有一个 PR 验证版本 我想列出 PR 中更改的所有文件以及状态 源在每个构建上同步 因此 在合并 PR 更改之前 源位于修订版A 通常origin master 让我将 PR 合并提交指定为B 我当前的实现调用git diff tree
  • 不同GIT版本的GIT合并结果不同

    在不同的 GIT 版本上运行 merge 命令我们得到不同的结果 命令是 git merge no ff origin master codeline Results 版本2 1 4 gt 合并成功 版本1 7 1 gt 同一提交上的同一合
  • 即使给出了公钥,Gitosis 也需要密码

    我在 Archlinux 上尝试配置 gitosis 时遇到了一些问题 http wiki archlinux org index php Setting Up Git ACL Using gitosis http wiki archlin
  • 我可以用一个命令销毁并重新创建 Git 远程分支吗?

    在 Git 中 我有时会在长期运行的分支上工作 我喜欢时不时地重新建立 master 基础 以便在准备好时使合并变得更容易 变基后 我无法将先前推送的分支推送到远程 因为我的分支的历史记录不再与该分支的远程历史记录一致 所以我必须先删除它
  • 计算机死机后 Git 存储库损坏

    我的电脑死机了 现在我的一个 git 存储库也坏了 当我尝试结账大师时 它告诉我 warning ignoring broken ref refs heads master error Your local changes to the f
  • 更改 git diff 输出前后的行数

    我想增加更改之前和之后显示的行数git diff output 类似于grep A3 B5 根据git diff help git diff支持与标准相同的参数diff命令 w r t 上下文 U
  • 克隆存储库时出现 Git 冲突复制错误

    我使用 dropbox 作为 git 存储库 现在由于同步中的一些问题 git 中存在一些冲突的副本 我该如何消除这种冲突 由于这种冲突 我无法克隆该存储库的内容 我在克隆存储库时遇到的错误是 Git 致命 参考格式无效 refs head
  • 为什么每次合并分支后我的 git log graph 都会多增长一行?

    我习惯使用git log oneline graph decorate all作为别名git ll在终端中查看提交图表 但是当我每次合并我的时 一个问题让我感到困惑develop to master 上面命令的输出可能是这样的 0d1bf7

随机推荐

  • 如何获取邮件联系人所属的所有组?

    此代码将查找特定电子邮件帐户或mail user帐户所属 get group where object FilterScript Members contains user 但是 在 O365 中您可以拥有mail contacts谁不是用
  • shell - temp IFS 仅作为换行符。为什么这不起作用: IFS=$(echo -e '\n')

    我正在尝试使用for在 shell 中迭代带有空格的文件名 我读过一个堆栈溢出问题 https stackoverflow com questions 4128235 bash shell scripting what is the exa
  • 如何向我的 Android 应用程序授予系统权限?

    我正在实现一个从设备上静默卸载应用程序的演示 在 adb shell 中 我可以使用 pm uninstall packagename 来执行任务 但是当我编写代码时 我收到了一些权限被拒绝的错误 我已经用谷歌搜索了一段时间 发现要获得 D
  • 在 JPanel 与 JComponent 中绘图

    我需要一些帮助来理解为什么 JComponent 与 JPanel 中的绘图工作方式不同 import java awt Color import java awt Graphics import java awt Graphics2D i
  • 跨平台移动应用程序开发框架如何工作?

    Rhodes Phonegap 和 Appcelerator 如何采用 Javascript 或 Ruby 并将它们编译成应用程序 SDK 的二进制文件 而这些应用程序 SDK 通常需要使用 Obj C Java 和其他语言编写应用程序 A
  • 实体框架,将视图映射到表

    我有一个基本视图 它返回与表相同的列 给出或获取 1 个字段 在我的 DAL 代码中 我返回 MyTableObject 的列表 但在某些情况下 我将调用视图返回相同的数据 但来自不同的源 List
  • Titanium 创建图像文件:file.write(blob) 未创建正确的文件

    我正在尝试使用 Titanium 1 8 1 读取 PNG 文件 这是我读取文件的代码 var f Ti Filesystem getFile Ti Filesystem resourcesDirectory KS nav views pn
  • Cython 中的抽象类(具有纯虚方法)

    快速版本 如何在 Cython 中声明抽象类 目标是只声明接口 以便其他类可以继承它 必须有没有实施这个班级的 接口 pxd cdef class IModel cdef void do smth self impl pyx from in
  • 使用 Sethi-Ullman 算法的表达式的代码生成器

    Give a AST tree http en wikipedia org wiki Abstract syntax tree 我想生成一种类似汇编的语言 我正在尝试使用塞西 乌尔曼 http en wikipedia org wiki S
  • 使用 NSPredicate 过滤 NSArray

    我想过滤一个数组User对象 User has fullname user id和一些更多的属性 根据firstName or lastName以一些字符串开头 我知道如何根据一种条件进行过滤 NSPredicate predicate N
  • 将jquery日期选择器集成到jsf中

    我正在关注这些例子here http jqueryui com demos datepicker icon trigger and here http jqueryui com demos datepicker icon trigger但我
  • 可以制作一个不调用Intent的Android通知吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何对表中的每一行运行特定的sql查询?

    所以我的数据库中有两个表 它们看起来都是这样的 通讯 拨打电话 Timestamp FromIDNumber ToIDNumber GeneralLocation 2012 03 02 09 02 30 878 674 Grasslands
  • 成员函数什么时候应该有 const 限定符,什么时候不应该有?

    大约六年前 一位名叫 Harri Porten 的软件工程师写道本文 http www froglogic com porten const html 提出这样的问题 成员函数什么时候应该有 const 限定符 什么时候不应该有 我发现这是
  • 查找最近的城市,例如 oodle.com

    因此 我正在尝试开发一个显示用户列表的应用程序 该网站应该检测用户位置 我为此使用 maxmind api 然后显示用户位置 用户指定半径内的城市的列表 我该怎么做呢 MaxMind API 让我可以通过 IP 地址检测用户的城市 但如何找
  • dprintf 与 break + 命令 + continue 之间有什么区别?

    例如 dprintf main hello n run 生成与以下内容相同的输出 break main commands silent printf hello n continue end run 使用是否有显着的优势dprintf ov
  • C# 中的嵌入字体

    我已经尝试了很多在 c 中的 wpf 应用程序中嵌入字体的方法 该字体的名称是 Roboto 文件名是机器人 ttf如果那有用的话 我已确保它已在程序集中编译 那么如何在a中应用字体TextBlock例如 您可以将字体应用到如下元素中
  • 在插入模式下移至行首

    我知道我可以使用 Home in insert mode Esc i to exit insert mode and enter it again effectively going to the beginning of line But
  • 如何使用 devise_invitable 发送自定义邀请

    我是 ruby 新手 使用 devise invitable gem 进行邀请 每条指令都正确发送 现在我想添加一个自定义主题 该主题将具有受邀者姓名和董事会名称以及与主题相同的自定义内容 我如何在以下操作方法中执行此操作而不使用额外的自定
  • git log --oneline --graph 输出的含义

    我正在学习相对提交引用并尝试理解以下内容git log oneline graph课程中提供的输出 在课程中它说给定的 HEAD 指向9ec05ca提交 HEAD 意思是曾祖父母提交 是0c5975a犯罪 但在我看来4c9749e如果每个