18

是否有一个命令可以让我根据与当前提交的距离而不是使用提交 ID 来检查提交?

用例

基本上我正在考虑设置一个 cron 作业类型脚本来在构建服务器上执行以下操作:

  • 拉下最新的特定 git 分支 (git pull dev)。
  • 构建它,运行测试。
  • 如果通过百分比低于上次存储的百分比:
    • 递归地返回提交、构建、运行测试,直到找到百分比更改的提交。
    • 记录引入回归的提交。

我对这将如何铰接在一起有一个粗略的想法,但除非我可以定期返回一个提交,否则它不会起作用。

如果没有特定的命令,我想我可以 grep 提交日志并每次都取第一个?

我感谢任何想法或帮助!

不像: 如何撤消 Git 中的最后一次提交?

我想返回“N”次提交。

4

2 回答 2

30
git checkout HEAD~N

将在您当前提交之前签出第 N 个提交。

如果您的历史记录中有合并提交,您可能会对

git checkout HEAD^N

这将检查合并提交的第 N 个父级(大多数合并提交有 2 个父级)。

因此,要始终在任何合并提交的第一个父级之后返回一个提交:

git checkout HEAD^1

您可能还感兴趣git bisect- 通过二进制搜索查找引入错误的更改。

于 2013-05-24T16:25:22.520 回答
10

如果提交的数量远大于引入错误的提交数量,那么迭代每个提交并运行测试可能会非常低效。无需针对历史中的每个提交运行测试,以找到引入错误的那个!你真的应该看看git bisect,特别是git bisect run

该问题表明您希望找到自历史某个时间点以来引入错误的每个提交,而不仅仅是最近引入的提交。我不认为你可以通过一次调用来做到这一点git bisect;您必须将它放在一个小脚本中的循环中。

于 2013-05-25T06:08:36.017 回答