我目前正在探索一个大型单一存储库的混乱历史,该存储库在如何合并工作方面几乎没有执行任何约定。
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 上的提交。
您可以运行的第一个快速检查:查看您的本地
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
您必须选择一种方式来查询 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