Git 不会让我变基(未跟踪的文件将被覆盖)。我应该怎么办?

Git won't let me rebase (untracked files would be overwritten). What should I do?

我只想 edit/amend 提交较早 Git 的文本。

我运行以下:

$ git rebase -i a41a407d6f53328d49267e6a8429b9492f023629
error: The following untracked working tree files would be overwritten by checkout:
    admin/roles/allowassign.php
    admin/roles/allowoverride.php
    admin/roles/assign.html
    admin/roles/assign.php
    admin/roles/manage.html
    admin/roles/manage.php
    admin/roles/managetabs.php
    admin/roles/override.html
    admin/roles/override.php    
Aborting
could not detach HEAD       

但是,git status 没有列出任何未跟踪的文件:

$ git status
On branch dev
nothing to commit, working directory clean

请注意,admin/roles 是存储库的子模块:

$ git submodule
 77c5addc1b210256da9171e3b286ffa5addd2478 admin/roles (heads/dev)

并列出忽略的文件:

$ git status --ignored
On branch duf-moodle-dev
Ignored files:
  (use "git add -f <file>..." to include in what will be committed)

        blocks/moodleblock.class.php.bak
        filter/tex/mimetex.exe
        lib/smarty/COPYING.lib

nothing to commit, working directory clean

保存 GIT 存储没有结果:

$ git stash save --include-untracked
No local changes to save

我在看,集成到资源管理器Shell,可以有这样的结果。 目前 Git 扩展、GIT GUI 和 SmartGIT 已集成到上下文 shell 中。 这可能会导致问题?

我的建议是,问题的根源是子模块的使用。 我保留了一些更改作为子模块。

知道为什么 rebase interactive 会出错以及如何修复它吗?

此外,如果不使用 rebase 就可以解决 edit/amend 较旧的提交描述...

当我返回以下内容时,我自己花了很多时间解决这个问题:

error: The following untracked working tree files would be overwritten by checkout:
index.php
    ...... (too many lines)
Please move or remove them before you can switch branches.

一般来说,只需 rm 文件然后结帐。您也可以添加和存储它们。 也许首先考虑像这样强制结帐:

git checkout --force master

我可以建议也看看The following untracked working tree files would be overwritten by checkout,这对我帮助很大!

解决方案是从主仓库中删除子模块(unsubmodule)。 然后就可以做变基了。

我有一个类似的问题,但在我的情况下,这是由于在使用 Windows 时更改文件名中的字母大小写引起的(这似乎让 git 对此感到困惑)。 我通过使用虚拟化 linux(可能是 docker 容器)解决了问题,检查了该分支并从那里执行 rebase

对我来说,即使是未跟踪的文件,rebase 也能正常工作,直到我前一天做了一些不寻常的步骤(在不同的分支上重置 head 等),然后突然在不同的分支(到 master 上)上的 rebase 停止工作。

这有帮助:

git fetch --all
git reset --hard origin/master

来源:https://ageekandhisblog.com/git-force-overwrite-of-untracked-working-tree-files/