当我尝试使用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
如何运作?有关此问题的任何变通方法吗?谢谢!
答案 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
此后,等分线正常工作-至少直到一次提交更改为止,所有创建它们的文件都将重新生成。