git中可达/不可达的含义是什么?

bru*_*uce 13 git

有点困惑..

它说,在git社区手册中

git log命令可以显示提交列表.它本身就显示了所有可以从父提交到达的提交; 但您也可以提出更具体的要求

$ git log v2.5.. # commits since (not reachable from) v2.5
Run Code Online (Sandbox Code Playgroud)

我认为git log本身只显示对当前分支的提交,并且提交是顺序的 - 那么如何从另一个提交一个提交,但是从它无法访问?

我想我要么误解了什么是git log,要么是什么无法访问意味着什么,或者两者兼而有之.感谢任何帮助!

Chr*_*ris 12

在Git中,你做的每个提交(除了第一个)都会有一个父提交.因此,任何给定的提交(第一个除外)都是一个(或可能不止一个)其他提交的子代.您还可以在Git中拥有多个开发分支,这些分支在特定的祖先提交中开始或偏离.Git中的任何内容都没有规定提交必须按时间顺序或线性顺序发生,因此该git log工具需要能够处理几种查询历史的方法.

例如,假设我开发了我的应用程序并按字母顺序进行提交:

---A---B---E---G
    \       \
     C---D   F
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我必须在提交A和E上创建一个新分支.

如果我要运行git log <D>(<D>提交的SHA 在哪里),那么日志历史将如下所示:

D---C---A---
Run Code Online (Sandbox Code Playgroud)

从那个提交中,只有父母和他们的祖先提交才能被"看到".提交B,E,F和G在技术上是来自提交D的"无法访问",因为它们不共享公共连接的父提交.

  • 谢谢.这很有道理. (2认同)
  • 这有点令人困惑 - 时间戳与它无关.并且`git log`并不是真正"查询历史",而是"祖先".如果你按时间顺序问它,它仍然会走在承诺的祖先链上; 它还会检查元数据并应用您的时间限制. (2认同)

J-1*_*DiZ 6

"Y可从X到达"表示对象Y可从DAG到达.取决于Y是什么,这可能意味着:

  • Y是提交:Y是X的父/祖先.
  • Y是目录/文件夹/ blob:Y是(或者说)X的父/祖先树中的提交的一部分.

对于某些doc(例如git-fsck),它只是说"Y是可达的".这意味着Y可以从某个标签/分支到达(即Y不能被垃圾收集)

  • 提示:作为一个git新手,我不太可能知道DAG的含义.你的整个答案都在我的头上. (2认同)
  • @bruce:定向非循环图.git中的所有内容都围绕着这个.提交对象包含对其父(但)的引用,但不包含对其子(ren)的引用.以同样的方式,提交知道它的树(基本上是目录列表),它知道什么blob(基本上是文件内容)和它包含的其他树,等等,但是没有人知道他们的父母.例如,参见git社区书籍中的[git object model](http://book.git-scm.com/1_the_git_object_model.html). (2认同)
  • 我添加了一个链接到http://eagain.net/articles/git-for-computer-scientists/(计算机科学家的git) (2认同)