Git 根据提交日期选择 ansestor

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

我可以通过

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 command-line revision
1个回答
0
投票

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
以避免在枝繁叶茂的祖先中迷失方向。

© www.soinside.com 2019 - 2024. All rights reserved.