git subtree pull说工作树有修改,但是git status说它没有。是什么赋予了?

时间:2010-09-02 02:00:58

标签: git subtree

如果我在我的某个存储库中执行此操作:

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子树拉引用了与子树相关的不同分支中的修改,但它并不完全清楚。

任何人都可以提供启发吗?

7 个答案:

答案 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)

我遇到这个问题,当我:

  • 添加了一个子树;
  • 意识到,我添加错误(到错误的目录);
  • 用rm;
  • 删除它
  • 尝试再次导入(到正确的位置)。

虽然puppet diff - 正确 - 没有显示任何内容,git diff-index HEAD列出了我刚删除的每个文件&#34;已删除&#34; - 即使我从未承诺(更不用说推送)任何东西。

我相信,这是git中的一个错误(在这里使用2.7.0)...错误与否,解决方法是切换到任何其他分支(使用通常的{{ 1}})然后回到你的。希望,这有助于某人 - 即使不是原来的提问者。

答案 4 :(得分:0)

如果使用Windows,请尝试使用Git Bash代替PowerShell或cmd.exe。 这样就解决了我的问题。

答案 5 :(得分:0)

我遇到了完全相同的错误。这发生在我的功能分支上。修复:

  1. 从远程功能分支拉到本地
  2. 从主远程拉到本地
  3. 将本地 master 合并到功能分支,提交并推送到远程
  4. 运行`git subtree pull --prefix MySubdirection https://my/repository/url remotebranch --squash

我不知道为什么我必须获得 master 并合并到我的功能分支,但这解决了问题。

答案 6 :(得分:-4)

尝试不使用this stackoverflow question中描述的--squash