您需要获取特定时间的 git 存储库的状态。当前的实现使用在一堆答案中的 SO 上找到的选项来获得提交,然后我们检查:
rev-list -n 1 --before="{datetime}" {branch}
它在 master 分支上运行良好,但在 feature 分支上存在问题,master 有时会在其中增长。对于这样的分支,返回来自 master 的提交哈希,这显然将我们切换到 master 状态。
阅读帮助提出了--first-parent option ,但我不确定它不会有其他我还没有偶然发现的问题。
所以我当前的版本是这样的:
rev-list -n 1 --first-parent --before="{datetime}" {branch}
我需要有关如何最好地请求此信息以及我在当前请求中缺少的内容的建议。
它会起作用,但需要采取预防措施
也就是说,您必须在存储库中创建某些规则/约定。
问题的症结在于:
masterGit只知道标记为绿色的分支。标题和顶部。因此,由于合并,在某个给定的时间点 (T) 无法确切地说出它
master在遥控器上处于什么状态,因为根本没有关于它的信息。他很容易成为第 1 点或第 2 点*。您有一个很好的启发式方法,请遵循 的第一个父级。对于合并,这通常意味着“只在合并所在的分支上进行”。但是当顺序可以颠倒时,有一个完全人为且容易遇到的情况:
master.feature保持原来的样子,之前的 tops [ , ]master的提交按照那个顺序变成了 top 。你的解决方案有效。masterfeaturemaster中的顺序feature。现在feature以与前顶部 [feature,master] 的合并提交结束。但master它仍然保持原样。feature订单master。但是由于它feature现在包含来自的所有提交master(因为上面的合并),所以发生快进(倒带):没有形成新的提交,并且master上述具有相反祖先顺序的合并提交成为 top 。如何处理
master选项时使用--no-ff,则不会发生快进,但会按照通常的祖先顺序创建新提交。*前提是没有人通过重写提交来破坏历史,但很明显,这是一种无望的情况,在这种情况下,一个 git 帮不了你。