git-bisect创建修改过的文件

时间:2012-10-02 17:08:22

标签: git bisect

当我尝试使用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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

尝试使用适当的选项`git diff'(man page),例如gitignore的--cached,排除文件和修改过的文件。

答案 2 :(得分:0)

除了.gitignore更改之外,如果您正在运行其他正在生成这些文件的进程,您也可以获得此更新。

答案 3 :(得分:0)

在我看来,当父文件发生更改时,那些文件的监视者会自动生成这些文件。

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

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

[map(.b) ] | flatten

但是,在我目前正在处理的回购中,这似乎与生意无关。相反,我必须将它们添加到存储库的分阶段更改区域,然后将分阶段更改区域重置为HEAD,以使用以下命令摆脱它们

git stash
git stash drop

此后,等分线正常工作-至少直到一次提交更改为止,所有创建它们的文件都将重新生成。