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

13,467

Solution 1

Solution was to remove the submodule from main repo (unsubmodule). Then it was possible to do rebase.

Solution 2

I had a similar problem, but in my case it was caused by changing letter case in file names while using Windows (which seems to get git confused about it). I solved by using a virtualised linux (could be a docker container), checking out that branch and doing the rebase from there.

Solution 3

For me rebase used to work fine even with untracked files until I did some unusual steps day before (resetting head on different branch etc.), and suddenly rebase on different branch (onto master) stopped working.

This helped:

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

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

Solution 4

I've spend a lot of time on this problem myself when I had the following returned:

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.

In general one has to just rm the files and then checkout. You could also, add and stash them. Perhaps first consider to force the checkout like:

git checkout --force master

I can suggest to also look at The following untracked working tree files would be overwritten by checkout, which helped me a lot!

Share:
13,467

Related videos on Youtube

klor
Author by

klor

Web developer, Unix system admin, Moodle admin, Moodle developer. Knowledge: Windows, Linux, Debian, Apache, MySQL, PHP, HTML, CSS, Moodle, etc.

Updated on June 15, 2022

Comments

  • klor
    klor about 2 years

    I just want to edit/amend the text of an older Git commit.

    I ran the following:

    $ 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       
    

    However, git status does not list any untracked files:

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

    Note, that admin/roles is a submodule of the repository:

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

    And listing ignored files:

    $ 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
    

    Saving GIT stash has no result:

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

    I was reading, that integrating into Explorer Shell, can have such result. Currently Git Extensions, GIT GUI, and SmartGIT are integrated into context shell. This may cause problem?

    My proposal is, that the problem origin is the use of submodules. I keep some changes as submodules.

    Any ideas why the rebase interactive gives be the error and how to fix it?

    Also, there would be even fine to have a solution to edit/amend an older commit description without using rebase...

  • splicer
    splicer almost 7 years
    Note that this can be done via git submodule deinit <your_submodule> on the current version of git. After the rebase, use git submodule init; git submodule update to bring back the submodule.
  • Alex78191
    Alex78191 over 6 years
    It's rebase, not checkout.
  • User Rebo
    User Rebo over 3 years
    Same problem for me on windows. I then checked out the base branch and cherry-picked the other commits on top of it.