git subtree pull表示工作树有修改,但git status表示没有,怎么回事?

d7v8vwbk  于 2023-08-01  发布在  Git
关注(0)|答案(8)|浏览(148)

如果我在我的一个仓库中这样做:

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子树的pull是指与子树相关的不同分支中的修改,但这并不完全清楚。
谁能提供启示?

tkqqtvp1

tkqqtvp11#

我也有同样的问题。从GIT源代码中,当命令git diff-index HEAD返回结果时,即使git status说工作树是干净的,也会抛出错误。
为了避免这个错误,在我的例子中,我重新 checkout 了工作树的当前分支,一切似乎都正常:git checkout <branch>
有点混乱但如果有人能解释一下原因。。

t1qtbnec

t1qtbnec2#

git reset --hard给我修好了
git reset --help
--hard重置索引和工作树。此后对工作树中的跟踪文件所做的任何更改都将被放弃。

qyzbxkaa

qyzbxkaa3#

我现在能搞定了。我的问题似乎是仓库是全新的:我从来没有承诺过什么。一旦我向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调试标志。

z9ju0rcb

z9ju0rcb4#

我只是遇到了这个问题,当我:

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

虽然puppet diff没有显示任何内容,但git diff-index HEAD将我刚刚删除的每个文件都列为“已删除”,尽管我从未提交(更不用说推送)任何内容。
我相信,这是git中的一个bug(这里使用2.7.0).不管有没有Bug,解决方法是切换到 * 任何 * 其他分支(使用通常的git checkout ....),然后回到您的分支。希望,这能帮助到别人--即使不是最初的提问者。

hujrc8aj

hujrc8aj5#

如果您使用的是Windows,请尝试使用Git Bash而不是PowerShell或cmd.exe。这解决了我的问题。

hfyxw5xn

hfyxw5xn6#

我也犯了同样的错误。这是发生在我的功能分支。解决方案:
1.从功能分支远程拉取到本地
1.从主远程拉取到本地
1.将本地主服务器合并到功能分支,提交并推送到远程
1.运行`git子树pull --prefix MySubdirection https://my/repository/url remotebranch --squash
我不知道为什么我必须获得master并合并到我的特性分支,但这解决了问题。

u91tlkcl

u91tlkcl7#

我在SourceTree上遇到了这个问题。问题是当我设置子树时,我选择了一个现有的文件夹。有一个警告,但我忽略了它。再次设置子树,但键入一个新的文件夹名称(一个还不存在)修复了这个问题。

e0bqpujr

e0bqpujr8#

尝试在不使用--squash的情况下按this stackoverflow question中所述进行拉取。

相关问题