我可以通过
HEAD@{30d}
到达我的 HEAD
30 天前的位置。但这是基于本地的reflog。它不会包含我从未签出的提交,并且可能包含我切换到的其他分支,即使它们从未合并到当前HEAD
。
有没有办法做类似的事情,但遵循提交祖先?我正在考虑类似
HEAD~{30d}
的东西,它可以被解释为“遍历 HEAD
的第一个父母,并返回第一个提交,其承诺日期早于 30 天。
我想要这个,因为我经常使用
git bisect
来追踪问题,而且通常我不知道问题到底是什么时候开始的。所以我想做一些类似 git bisect HEAD HEAD~{30d}
的事情来寻找过去 30 天内的变化。现在我正在通过使用 git log
选择提交来解决这个问题。
git bisect start HEAD $(git log -n1 --pretty=format:%H --before '30 days ago')
这可行,但不太方便。令人惊讶的是,似乎没有一个常见查询的语法。
— 可以用,但不太方便。git log -n1 --pretty=format:%H --before '30 days ago
你可以做得更好。
git rev-list -1 --before=30days @
如果您经常这样做,您可以创建一个别名,并使用一些选项语法灵活性,
git config --global alias.bef 'git rev-list -1 @ --before'
然后
git bef 30days
打印它。
您可能需要添加
--first-parent
以避免在枝繁叶茂的祖先中迷失方向。