是否有可能找到origin/master在历史上某个时刻指向的所有提交?

问题描述 投票:0回答:1

我目前正在探索一个大型单一存储库的混乱历史,该存储库在如何合并工作方面几乎没有执行任何约定。

  1. 有时人们会重新基于 master,然后快速合并他们的分支,而无需合并提交。
  2. 有时人们通过合并提交将代码直接合并到 master 中。在这种情况下,第一个父母是主人。
  3. 有时人们将 master 反向合并到他们的分支中,然后将 master 快进到他们创建的合并提交。在这种情况下,第一个父级属于功能分支,第二个父级是主分支。

git log
或其他git命令是否有任何神奇的变体可以向我显示
origin/master
的“线性”历史?也就是说,我想查看 origin/master 在某个时刻指向的所有提交,而不是仅在功能分支上的提交。

实际上,我正在尝试发现假设会出现在

git reflog master
中且具有未过期引用日志的提交,但在不保留引用日志的远程端 (GitHub) 上除外。

如果每个人都选择了策略 1) 或 2),那么

git log --first-parent
可能足以满足我想要做的事情,但在这种情况下不起作用,因为合并策略很混乱。


其他背景:

我最终试图找到当前时间之前大约 24 小时的

origin/master
的提交,但是按提交日期排序不起作用,因为历史记录包含较早提交的提交,然后合并到 origin/master 中过去 24 小时,这就是为什么我试图过滤那些曾经存在于 origin/master 上的提交。

git github merge
1个回答
0
投票

您可以运行的第一个快速检查:查看您的本地

origin/master
参考有哪些本地引用日志:

git reflog origin/master

此引用仅在您运行

git fetch
(或
git pull
)时才会更新,因此更新的粒度取决于您运行它的频率,但如果信息“昨天
origin/master
状态是什么?”对你有用,这应该足够了。


虽然你无权访问 github 上的 reflog,但 github 的 API 有“events” api:

https://docs.github.com/en/rest/activity/events?apiVersion=2022-11-28

更具体地说:

  • 存储库事件(链接):
    /repos/{owner}/{repo}/events
  • 其中包含 PushEvents
  • 的列表

您必须选择一种方式来查询 API 并过滤您这边的响应(例如:

curl + jq
?
node
?
python
?
go
?您命名它...),您正在处理的事件感兴趣将匹配以下过滤器:

  • evt.type == "PushEvent" && evt.payload.ref == "refs/heads/master"

您正在寻找的领域是:

  • evt.payload.head
    :已推送的提交的 sha
  • evt.created_at
    :记录推送时的时间戳
  • 可能
    evt.payload.before
    :仔细检查您是否看到了
    master
  • 上的所有推送事件
© www.soinside.com 2019 - 2024. All rights reserved.