【问题标题】:git deleting branch after 3 way merge. What does it look like as a diagram?3路合并后git删除分支。它看起来像什么图表?
【发布时间】:2018-03-21 01:18:25
【问题描述】:

我一直在关注 Scott Chacon 的 Pro Git Book,我已经到了第 3 章的结尾,我们刚刚完成了三路合并。见下图(我自己绘制的图不是本书的屏幕截图):

'ma​​ster'和'issue53'合并后,导致合并提交c6,作者说我们可以删除分支'issue53'。

git branch -d issue53

引擎盖下的那个分支实际上发生了什么,结果图会是什么样子?我问这个是因为作者没有解决这个问题。分支是否仍然存在但只是没有指向?还是发生了一些我不知道的魔法?

【问题讨论】:

  • 这张图看起来不像我以前看到的那样。在任何情况下,当您删除一个分支时,如果该分支中的提交被其他分支引用,它们将持续存在,至少对于大多数提交来说,这里可能就是这种情况。实际上,即使你核对一个分支,所有提交仍然会在 reflog 中列出,至少在一段时间内。
  • 蒂姆,我简化了图表以切入核心点。我很想知道你会以不同的方式绘制它。
  • 嗨安德鲁,你确定这是三路合并吗?据我所知,commit C6 只有两个,而不是三个父母。
  • 教科书上是这样称呼的,所以我认为它是正确的。这是因为合并需要 C2、C4 和 C5。
  • @TimBiegeleisen(和 Andrew S):术语 三向合并 指的是单个祖先加上作为其输入的两个版本。见en.wikipedia.org/wiki/Merge_(version_control)#Three-way_merge

标签: git merge branch diagram


【解决方案1】:

引擎盖下的那个分支实际上发生了什么

这取决于你所说的分支是什么意思。见What exactly do we mean by "branch"?

结果图会是什么样子?

用 ASCII 而不是花哨的图形来绘制它,我明白了:

C0<-C1<-C2<-C4<---C6   <-- master (HEAD)
          \      /
           C3<-C5

也就是说,什么发生在 commits 上。但是,名称 issue53 曾经指向提交 C5,现在(根本)不再存在。

由于图表中的每个提交仍然可以从名称 master 开始并向后工作,因此每个提交都受到 Git 垃圾收集过程的保护。

【讨论】:

    【解决方案2】:

    git 中的分支只是一个指向提交的指针,它有一个非常简单的实现——它是一个包含它所指向的提交的校验和的文本文件。

    所以在这个例子中,你会有一个文件.git/refs/heads/issue53 代表你的分支(是你的分支)。

    当你在 git 中删除一个分支时,你会删除代表该分支的文本文件(指针)。在这种情况下,.git/refs/heads/issu53

    【讨论】:

      猜你喜欢
      • 2020-11-13
      • 2016-04-14
      • 2015-12-22
      • 2016-11-02
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      • 2013-12-21
      • 1970-01-01
      相关资源
      最近更新 更多