3

我在尝试使用git-bisect来查找 jquery git 存储库中的特定更改时遇到了一个奇怪的问题: bisect 命令似乎创建了阻止 bisect 进程继续进行的修改文件。这些是我首先运行的命令:

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

4 回答 4

0

您可能应该输入git bisect reset HEAD命令来清理二分状态并返回原始 HEAD

于 2012-10-02T17:41:36.433 回答
0

我希望您的 gitignore 文件在两个修订版之间发生了变化,因此 git 现在认为这 4 个文件与预期的不同。

Try a `git diff' (man page) with the appropriate option such as --cached for your gitignore, exclude files and those modified files.

于 2012-10-05T20:16:52.097 回答
0

除了 .gitignore 更改之外,如果您有一些其他进程正在运行并不断生成这些文件,您也可以得到这个。

于 2015-03-12T23:26:56.410 回答
0

在我看来,当父文件更改时,这些文件似乎是由某种描述的观察者自动生成的。

因此,只要 git 签出一个更改其父级的提交,就会生成新文件。当您尝试进行下一个等分时,它们将被新提交覆盖。默认情况下,Git 不允许这种情况发生,因此取消了对分。

解决方案是删除生成的文件。大多数时候我发现以下工作:

git stash
git stash drop

但是,在我目前正在处理的回购中,这似乎没有做生意。相反,我必须将它们添加到 repo 的分阶段更改区域,然后将分阶段更改区域重置为 HEAD 以通过以下方式摆脱它们

git add .
git reset --hard HEAD

之后 bisect 正常工作 - 至少在提交更改创建它们的任何文件并且它们再次重新生成之前。

于 2018-11-13T17:04:35.647 回答