git - 分支是什么时候从 master 上 fork 出来的?

标签 git branch git-fork

几天前,我在终端中从 master fork 了当前分支。从那时起,我做了一些提交,但是当我输入 git log 时,我看到了以前的提交、我在当前分支上所做的提交以及其他人在 master 上所做的提交。只能假设,在其他人的提交和我的提交之间,我会(在主分支上)输入

git checkout -b newbranch

是否有一个 git 命令可以告诉您 newbranch 从 master fork 时的确切时间戳?

最佳答案

不是真的。那不是 git 跟踪的东西。事实上,它甚至没有跟踪 newbranch 是“从 master”专门分支的事实。 (顺便说一句,我建议不要使用“fork”来指代分支之间的关系,因为“fork”通常对于 git repos 和 OSS 项目有特定的含义。)

正如 RomainValeri 所建议的,在特定情况下,您也许能够查看与分支关联的元数据的文件系统时间戳;但这些并不能保证有任何意义。有时,他们提到的文件要么不存在,要么在与分支创建无关的时间创建。即使它确实存在并且确实反射(reflect)了正确的时间戳,它也没有多大意义;因为“创建分支”仅意味着创建了一个新的引用。这并不意味着它已经(或曾经)被 checkout ,或者说任何关于哪些引用将包含新提交的信息。

可视化现在情况的最简单方法是获取显示分支和其他引用位置的提交图。您可以使用诸如 git log --graph --all --full-history 之类的东西。 (--full-history 选项可能是不必要的,但由于我们不确定发生了什么,这将给出最真实的图片。)或者您可能会找到一个 GUI使其更易于阅读;当我需要查看“大局”时,我经常使用 gitk --all --full-history 。

请记住,默认情况下肯定会显示创建分支之前的提交。也就是说,如果您有

A -- B -- C <--(master)
      \
       D <--(newbranch)

那么 D 的日志默认包括 ABD,因为这是newbranch 中存在的代码的完整历史记录。如果您看到 C,则表明您实际上根本不在 newbranch 上(并且上图并不是您真正的情况 在这种情况下有)。

其余部分可能是切线,但以防万一......

默认情况下包含 AB 的原因是,git 不知道/关心哪个分支是从哪个其他分支创建的,或者类似的东西那。在上图中,newbranch 可能是原始分支,master 可能是在 B 处从中分支出来的;对于 git,这与从 B 处的 master 分支的 newbranch 相同。或者,D 可以在分离的 HEAD 状态下创建,并且 newbranch 可以在事后创建以保留 D。或者可能会发生很多其他事情。

如果您只想查看在 newbranch 上添加的提交,您可以说类似 git log master..newbranch (告诉日志以排除属于 master 历史记录的任何提交)。

关于git - 分支是什么时候从 master 上 fork 出来的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54310789/

相关文章:

node.js - Node 项目的 Azure git 部署失败

git - 如何覆盖 composer.json 中单个包的供应商目录

git - 防止分支在 PR 完成时被删除

git - 显示提交 A 处于打开状态且提交 B 未处于打开状态的所有分支?

Git:使用共享本地存储进行克隆(使用硬链接(hard link))

Mercurial 将一个分支设置为新的默认分支

svn - 复制两次会导致分支内分支而不是错误

Git:为什么在 Re-basing 之后我的 fork 仍然落后于原始的 repo master?

github - 如何找到已删除的要点或 GitHub 存储库的孤立分支

git - 如何查看从我的存储库模板 (GitHub) 创建的存储库数量