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

时间:2010-11-06 04:07:42

标签: git

有点困惑..

git community manual中,它说

  

git log命令可以显示列表   提交。就其本身而言,它显示了所有   从父级可以访问的提交   承诺;但你也可以做更多   具体要求

$ git log v2.5.. # commits since (not reachable from) v2.5

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

我想我要么误解了git log的作用,要么是什么无法达到的意思,或者两者兼而有之。感谢任何帮助!

2 个答案:

答案 0 :(得分:11)

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

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

---A---B---E---G
    \       \
     C---D   F

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

如果我要运行git log <D>(其中<D>是提交的SHA),那么日志历史记录将如下所示:

D---C---A---

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

答案 1 :(得分:6)

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

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

对于某些文档(例如git-fsck),它只是说“Y可以访问”。这意味着Y可以从某个标签/分支到达(即Y不能被垃圾收集)