Git-bisect如何创建修改过的文件?

3
我在尝试使用git-bisect在jquery git存储库中查找特定更改时遇到了奇怪的问题:二分命令似乎会创建修改后的文件,阻止了二分过程的继续进行。以下是我首先运行的命令:
git clone https://github.com/jquery/jquery.git
cd jquery
git bisect start
git bisect bad
git bisect good 2aa67026ebe6bea90fd137fc99b4c9422977e3f0

在这一点上,我会得到输出:

Bisecting: 1977 revisions left to test after this (roughly 11 steps)
[3e5520fbdc7231b3f38e145020b40524c1e6654d] Tagging the 1.4.3rc2 release.

但现在,当我运行 git status 命令时,输出结果如下:

# Not currently on any branch.
# You are currently bisecting.
#    (use "git bisect reset" to get back to the original branch)
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   build/google-compiler-20091218.jar
#   modified:   build/js.jar
#   modified:   test/data/text.php
#   modified:   test/delegatetest.html
#

有四个文件显示为已修改。如果我运行 git bisect bad,就会出现一个错误提示:我的本地更改将被检出覆盖。

我是否做错了什么或者误解了 git-bisect 的工作原理?有没有解决这个问题的方法?谢谢!

4个回答

0
除了更改 .gitignore,如果您有一些其他进程正在运行并不断生成这些文件,您也可能会遇到这个问题。

0

我预计在两个版本之间你的.gitignore文件已经发生了变化,因此git现在认为这4个文件与其期望的不同。

尝试使用适当的选项,例如--cached,对.gitignore、排除文件和修改了的文件进行`git diff'(man page)


0
您可能需要输入 git bisect reset HEAD 命令来清理二分状态并返回到原始 HEAD。

2
谢谢你的回答!然而,我的目标是让二分法实际起作用,而不是返回到HEAD。或者我误解了吗? - msridhar
嗨 :) 我可能错了,但我认为git bisect用于查找导致回归的提交。一旦找到它,二分法作业就完成了,您必须根据所看到的内容相应地修补HEAD。 - Maxime
1
啊,问题在于二分作业没有完成。在上面的例子中,我只完成了第一次运行(你可以在git输出中看到还剩大约11个步骤)。问题是由于修改后的文件,进程被卡住了,但我并没有修改任何东西。 - msridhar

0

在我看来,这些文件似乎是由某个监视器自动生成的,当父文件发生更改时。

因此,一旦git检出更改其父文件之一的提交,就会生成新文件。当您尝试进行下一个二分查找时,它们将被新提交覆盖。 Git默认情况下不允许发生这种情况,因此取消二分查找。

解决方案是删除生成的文件。 大多数情况下,我发现以下方法有效:

git stash
git stash drop

然而,在我目前工作的代码库中,似乎这并不奏效。相反,我必须将它们添加到代码库的暂存更改区域,然后重置暂存更改区域到HEAD以通过以下方式摆脱它们。

git add .
git reset --hard HEAD

之后二分法正常工作 - 至少直到提交更改创建它们的任何文件并再次生成它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接