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

Sam*_*ane 27 git subtree

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

git subtree pull --prefix=frameworks/AquaticPrime --squash AquaticPrime
Run Code Online (Sandbox Code Playgroud)

我明白了:

Working tree has modifications.  Cannot add.
Run Code Online (Sandbox Code Playgroud)

如果我这样做(当然是在同一个地方):

git status
Run Code Online (Sandbox Code Playgroud)

我明白了:

# On branch master
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

我不太确定这里发生了什么.git status命令意味着我没有修改,所以我假设git子树拉引用了与子树相关的不同分支中的修改,但它并不完全清楚.

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

Kor*_*nik 30

我刚遇到同样的问题.从GIT源,当命令git diff-index HEAD返回结果时,即使git status表示工作树是干净的,也会抛出错误.

为了避免这个错误,在我的情况下,我重新检查工作树的当前分支,一切似乎都正常: git checkout <branch>

这有点困惑,但如果有人能解释为什么......

  • git checkout 没有解决我的问题,但 git reset 解决了。 (2认同)

Ans*_*ssi 16

git reset --hard 给我修好了

git reset --help

--hard 重置索引和工作树。此后对工作树中跟踪文件的任何更改都将被丢弃。

  • 仅当您确定“git reset --hard”的作用时才使用,否则您可能会失去工作。也许“git stash save --include-untracked”会是一个更安全的方法?(因为您可以稍后检索隐藏的工作) (2认同)

B T*_*B T 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标志.


Lar*_*lke -5

尝试在没有此 stackoverflow 问题--squash中描述的情况下进行拉取。

  • 我有同样的问题,删除 --squash 并不能解决问题。 (3认同)
  • 我一开始并没有使用南瓜。事实上,我什至不知道为什么你会认为它会起作用,因为你发布的问题没有询问我们收到的消息。 (2认同)