返回Git中的N提交以查找导致测试回归的提交

chr*_*989 13 git automation git-commit

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

用例

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

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

我对这将如何合在一起有一个粗略的想法,但除非我能定期返回一个提交,否则它将无法工作.

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

我感谢任何想法或帮助!

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

我想回去"N"次提交.

Pet*_*ren 22

git checkout HEAD~N
Run Code Online (Sandbox Code Playgroud)

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

如果您的历史记录中有合并提交,那么您可能会感兴趣

git checkout HEAD^N
Run Code Online (Sandbox Code Playgroud)

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

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

git checkout HEAD^1
Run Code Online (Sandbox Code Playgroud)

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

  • 原来的海报应该真正看看自动化[`git bisect`](http://git-scm.com/docs/git-bisect).还有[Pro Git书中有关它的部分](http://git-scm.com/book/en/Git-Tools-Debugging-with-Git). (2认同)

gcb*_*son 10

如果提交的数量远远大于引入错误的提交数量,则迭代每次提交并运行测试可能效率很低.没有必要针对历史记录中的每个提交运行测试,以找到引入错误的那个!你应该git bisect特别注意git bisect run.

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