【问题标题】:Git won't let me rebase (untracked files would be overwritten). What should I do?Git 不会让我变基(未跟踪的文件将被覆盖)。我该怎么办?
【发布时间】:2015-05-26 15:41:20
【问题描述】:

我只想编辑/修改旧 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

我在读,集成到 Explorer Shell 中,可以有这样的结果。 目前 Git Extensions、GIT GUI 和 SmartGIT 已集成到上下文 shell 中。 这可能会导致问题?

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

任何想法为什么 rebase 交互会给出错误以及如何修复它?

此外,如果有一个解决方案来编辑​​/修改旧的提交描述而不使用 rebase...

【问题讨论】:

  • git status --ignored 显示什么?
  • git status --ignored 结果添加到原始帖子中。 admin/roles/... 没有什么共同点
  • @klor 由于我的回答没有帮助,我会删除它,至少现在是这样。
  • 我打算停止使用子模块。我希望,如果我停止使用子模块,这些问题就会消失。但是,没有简单的方法可以将子模块存储库合并到我的父存储库:-(
  • 但是,当我尝试将子模块合并到主仓库,然后将子模块的最旧提交重新定位并粘贴到主仓库的最后提交时,我收到“错误:以下未跟踪的工作树文件将被结帐覆盖”。 “Catch-22”已关闭。有什么想法吗?

标签: git commit rebase


【解决方案1】:

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

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,这对我很有帮助!

【讨论】:

  • 这是变基,而不是结帐。
【解决方案2】:

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

【讨论】:

  • 请注意,这可以通过 git submodule deinit &lt;your_submodule&gt; 在当前版本的 git 上完成。变基后,使用git submodule init; git submodule update 带回子模块。
【解决方案3】:

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

【讨论】:

  • 在 Windows 上对我来说同样的问题。然后我检查了基础分支并在其上挑选了其他提交。
【解决方案4】:

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

这有帮助:

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

信用:https://ageekandhisblog.com/git-force-overwrite-of-untracked-working-tree-files/

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 2018-06-16
    • 1970-01-01
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-02-21
    • 2013-08-02
    • 2021-12-02
    相关资源
    最近更新 更多