我读过一些文章说这git bisect很棒,但我不是母语,我不明白为什么它很棒.
你能否在一些代码示例上展示一下它的惊人之处?它就像svn blame?
我正在通过命令行做一个非自动化的git bisect.一切顺利,直到我在命令历史记录中意外地返回错误的行,而不是运行测试,我运行'git bisect good'(或坏).哎呀 - 我还不知道这个提交是否应该标记为好还是坏,但这就是我所做的.
我可以撤消'git bisect good'命令,或者让git忘记它的结果,然后返回并运行该提交的测试?
我通过指定好的和坏的修订开始我的git bisect,但我不认为他们注册了.另外,因为我试图指定git bisect好坏,我不认为git正在做任何事情.我想中止整个二等分,以便我可以重新启动操作.git bisect reset似乎是我正在寻找的东西,但我想在可能弄乱任何东西之前仔细检查.
如果尝试从存储库的根目录以外的任何位置运行任何git-bisect命令,则会告诉您:
您需要从工作树的顶层运行此命令.
这是为什么?我知道没有其他git命令有这个要求,我认为没有明显的理由,bisect应该是特殊的.手册页也没有提到这个限制.
这真的不是什么大不了的事.我大多只是好奇.
我的历史看起来像这样:
* 3830e61 Add data escaping. (Bad)
* 0f5e148 Improve function for getting page template.
* aaf8dc5 Merge branch 'navigation'
|\
| * 3e667f8 Add icons.
| * 43a07b1 Add menu styles. (Breaks)
| * 107ca95 Add Responsive Nav. (Good)
* | ea3d736 Add ‘Admin’ notice.
* | 17ca0bb Update placeholder text.
|/
* f52cc34 Add featured image.
* 2abd954 Style placeholders.
Run Code Online (Sandbox Code Playgroud)
我正在努力学习更多git bisect,但我对这段历史遇到了麻烦.我知道这107ca95很好而且3830e61很糟糕.当我运行时git bisect,提交107ca95..3e667f8被忽略.我碰巧知道这43a07b1是引入回归的提交,但它永远不会被评估.
这大致是我所做的:
git checkout …Run Code Online (Sandbox Code Playgroud) 我知道git bisect在设计上是分支感知的,因此如果在良好提交,G和错误提交之间,B,你在一个分支中合并,它也需要考虑这些变化,因为bug可能被包含在分支中.
在我的情况下,我有一个依赖作为一个侧分支,我不时合并我的主项目的变化.依赖项可以被认为是一个库,它有不同的运行方式,不同的构建系统等来自我的主项目,但我仍然希望通过合并到主分支的最近更改.
问题是,在这种情况下,当你在依赖提交的提交中最终进行不可编译的提交时.
我真的只想在进行二分时将每个分支合并视为单个提交.
到目前为止我找到的一个解决方法是使用git log --first-parent制作一个有效提交G..B的列表,然后在二等分的情况下,如果当前提交不在该列表中,请执行git bisect skip.这需要花费很多时间(每次跳过都要检查/更改大量文件).
所以问题是:有没有办法做 - 第一父与git bisect或提供我觉得有效的提交列表能够避免检查我知道已经不可编译的分支?我们如何只检查图中标记为o的提交?
G---o---o---o---o---o---o---B main project branch
/ / /
x---x---x---x---x dependency
\ /
x' dependency project taskbranch
编辑:为清晰起见添加了图表
在我正在进行的项目中,我们保留每个功能都有自己的功能,并在功能准备好后将其合并回主功能.每个功能分支内的提交可能包括许多"WIP"和其他功能的破坏功能,直到它完整和稳定.
无论如何,由于主分支的提交是唯一的(据称)稳定的,我只想git bisect在那个分支上.
有没有办法限制git bisect只有一个分支?
我正在使用git bisect来查找导致提交的失败.但是,该范围内的许多提交肯定是无关紧要的(因为它们是对文档或单元测试的提交).我想让git bisect自动跳过影响某些目录中文件的提交.这有可能吗?
假设我有一个非常快速的测试脚本的小项目,我只想将所有内容从最初的提交到当前的提交一分为二.我怎样才能做到这一点?
为了澄清,我不想浪费时间来识别一个好的提交和一个糟糕的提交,所以我正在寻找一种快速的方法来将最新的提交标记为坏,并且初始提交是好的.
在使用时git bisect,可以运行git bisect skip以将当前提交标记为不可构建/不可测试,以尝试让Git选择其他提交来进行测试.
Git如何决定哪个提交尝试git bisect skip?试验表明它不仅仅是一个相邻的提交,但我无法解决这个模式.
编辑:我知道基本git bisect是二进制搜索,但我很好奇git bisect skip,这显然做了一些更复杂的事情.
实验表明,它不仅仅是选择相邻的提交; 下面创建了100个提交,编号为0-99,然后开始将它们一分为二.第一个提交git bisect选择位于中间,但git bisect skip之后的每一个似乎都或多或少地随机选择.
$ git init
Initialized empty Git repository in .git/
$ for (( i=0; i<100; i++ )); do echo $i > file; git add file; git commit -m $i >/dev/null; done # Create some dummy commits
$ git bisect start HEAD $(git rev-list --max-parents=0 HEAD) # HEAD is bad, root …Run Code Online (Sandbox Code Playgroud)