关于提交:Git不会让我重新定义(未跟踪的文件会被覆盖)。

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

我只想编辑/修改较旧的Git提交的文本。

我运行了以下程序:

1
2
3
4
5
6
7
8
9
10
11
12
13
$ 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没有列出任何未跟踪的文件:

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

注意,管理员/角色是存储库的子模块:

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

并列出忽略的文件:

1
2
3
4
5
6
7
8
9
10
$ 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 stash没有结果:

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

我在读,集成到Explorer Shell中,可以得到这样的结果。目前,Git扩展、GitGUI和SmartGit集成到上下文shell中。这可能导致问题?

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

有什么想法为什么rebase interactive会出错,以及如何修复它?

此外,甚至还有一个解决方案可以在不使用REBASE的情况下编辑/修改较旧的提交描述…


解决方案是从主repo(非主repo)中移除子模块。然后就可以重新平衡了。


我也遇到过类似的问题,但在我的例子中,这是由于在使用Windows时更改了文件名中的字母大小写(这似乎让Git感到困惑)。我通过使用虚拟Linux解决了这个问题,检查了那个分支并从那里执行rebase


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

1
2
3
4
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然后签出。你也可以添加和储存它们。也许首先考虑强制结账,比如:

1
git checkout --force master

我也可以建议查看以下未跟踪的工作树文件,这些文件将被签出覆盖,这对我有很大帮助!