如果我在我的某个存储库中执行此操作:
git subtree pull --prefix=frameworks/AquaticPrime --squash AquaticPrime
我明白了:
Working tree has modifications. Cannot add.
如果我这样做(当然是在同一个地方):
git status
我明白了:
# On branch master
nothing to commit (working directory clean)
我不太确定这里发生了什么。 git status命令意味着我没有修改,所以我假设git子树拉引用了与子树相关的不同分支中的修改,但它并不完全清楚。
任何人都可以提供启发吗?
答案 0 :(得分:25)
我遇到了同样的问题。
从GIT源,当命令git diff-index HEAD
返回结果时,抛出错误,即使git status
表示工作树是干净的。
为了避免这个错误,在我的情况下,我重新检查工作树的当前分支,一切似乎都没问题:git checkout <branch>
有点困惑,但如果有人能解释原因......
答案 1 :(得分:12)
我现在解决了这个问题。在我看来,我的问题是存储库是全新的:我从来没有做过任何事情。一旦我将文件提交到repo,我就可以移除此错误。
但是,使用命令git subtree add C:\gitTest\repos\subA -d --prefix subA
我收到了新错误:
fatal just how do you expect me to merge 0 trees?
在搞乱了一分钟后,我发现需要将特定的修订版传递给它。所以这个命令似乎成功了:
git subtree add C:\gitTest\repos\subA HEAD -d --prefix subA
显然你不需要-d debug标志。
答案 2 :(得分:3)
git reset --hard
修复了它
来自git reset --help
- hard重置索引和工作树。之后对工作树中跟踪文件的任何更改都将被丢弃。
答案 3 :(得分:1)
我遇到这个问题,当我:
虽然puppet diff
- 正确 - 没有显示任何内容,git diff-index HEAD
列出了我刚删除的每个文件&#34;已删除&#34; - 即使我从未承诺(更不用说推送)任何东西。
我相信,这是git中的一个错误(在这里使用2.7.0)...错误与否,解决方法是切换到任何其他分支(使用通常的{{ 1}})然后回到你的。希望,这有助于某人 - 即使不是原来的提问者。
答案 4 :(得分:0)
如果使用Windows,请尝试使用Git Bash代替PowerShell或cmd.exe。 这样就解决了我的问题。
答案 5 :(得分:0)
我遇到了完全相同的错误。这发生在我的功能分支上。修复:
我不知道为什么我必须获得 master 并合并到我的功能分支,但这解决了问题。
答案 6 :(得分:-4)
尝试不使用this stackoverflow question中描述的--squash
。