首页 文章

gitignore和“以下未跟踪的工作树文件将被结帐覆盖”

提问于
浏览
713

所以我在.gitignore文件中添加了一个文件夹 .

一旦我做了 git status 它告诉我

# On branch latest
nothing to commit (working directory clean)

但是,当我尝试更改分支时,我得到以下内容:

My-MacBook-Pro:webapp marcamillion$ git checkout develop
error: The following untracked working tree files would be overwritten by checkout:
    public/system/images/9/thumb/red-stripe.jpg
    public/system/images/9/original/red-stripe.jpg
    public/system/images/8/thumb/red-stripe-red.jpg
    public/system/images/8/original/red-stripe-red.jpg
    public/system/images/8/original/00-louis_c.k.-chewed_up-cover-2008.jpg
    public/system/images/7/thumb/red-stripe-dark.jpg
    public/system/images/7/original/red-stripe-dark.jpg
    public/system/images/7/original/DSC07833.JPG
    public/system/images/6/thumb/red-stripe-bw.jpg
    public/system/images/6/original/website-logo.png
    public/system/images/6/original/red-stripe-bw.jpg
    public/system/images/5/thumb/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/5/original/logocompv-colored-squares-100px.png
    public/system/images/5/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/4/thumb/DSC_0001.JPG
    public/system/images/4/original/logo.png
    public/system/images/4/original/DSC_0001.JPG
    public/system/images/4/original/2-up.jpg
    public/system/images/3/thumb/logo2.gif
    public/system/images/3/original/logo2.gif
    public/system/images/3/original/Guy_Waving_Jamaican_Flag.jpg
    public/system/images/3/original/11002000962.jpg
    public/system/images/2/thumb/Profile Pic.jpg
    public/system/images/2/original/Profile Pic.jpg
    public/system/images/2/original/02 Login Screen.jpg
    public/system/images/1/original/Argentina-2010-World-Cup.jpg
Please move or remove them before you can switch branches.
Aborting

这就是我的.gitignore文件的样子:

.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/**/*
public/system/images/*
public/system/avatars/*

如何使这个工作,所以我可以切换分支而不删除这些文件?

如果我进行更改,它会影响这些文件吗?换句话说,如果我之后回到这个分支,那么一切都是完美的,直到我最近的提交?

我不想丢失那些文件,我只是不希望它们被跟踪 .

27 回答

  • 0

    就我而言,问题在于子模块 . master 与另一个分支合并,该分支为项目添加了一个新的子模块 . 我试图检查的分支没有't have it, that'为什么git抱怨未跟踪的文件,而其他任何建议的解决方案都没有为我工作 . 我强行结帐到我的新分店,拉了主人 .

    • git checkout -f my_branch

    • git pull origin master

    • git submodule update --init

  • 228

    您似乎希望忽略这些文件,但它们已经被提交了 . .gitignore对已存在于repo中的文件没有影响,因此需要使用 git rm --cached 删除它们 . --cached 将阻止它对您的工作副本产生任何影响,并且它将在下次提交时标记为已删除 . 从repo中删除文件后,.gitignore将阻止再次添加它们 .

    但是你的.gitignore还有另外一个问题,你过度使用通配符并导致它匹配的次数少于预期 . 而是让我们改变.gitignore并试试这个 .

    .bundle
    .DS_Store
    db/*.sqlite3
    log/*.log
    tmp/
    public/system/images/
    public/system/avatars/
    
  • 0

    警告:它会删除未跟踪的文件,因此对提出的问题不是一个很好的答案 .

    我也点击了这条消息 . 在我的情况下,我不想保留文件,所以这对我有用:

    git 2.11和更新版本

    git clean  -d  -fx .
    

    年长的git

    git clean  -d  -fx ""
    

    http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

    • -x 表示也会删除被忽略的文件以及git未知的文件 .

    • -d 表示除了未跟踪的文件外,还删除未跟踪的目录 .

    需要

    • -f 才能强制它运行 .
  • 4

    Warning: This will delete the local files that are not indexed

    强迫它: git checkout -f another-branch

  • 3

    如果您使用的是OS X,则可能是因为文件的名称已更改了某些字符 . 尝试设置以下配置选项:

    git config core.ignorecase true
    
  • 2

    Git告诉你它想要创建文件(名为 public/system/images/9/... 等),但是你已经在该目录中有了Git没有跟踪的现有文件 . 也许其他人将这些文件添加到Git存储库中,这是您第一次切换到该分支?

    可能有一个原因导致您的 develop 分支中的文件,而不是当前分支中的文件 . 你可能不得不问你的合作者为什么会这样 .

    我如何使这个工作,所以我可以切换分支而不删除这些文件?

    如果不使文件以某种方式消失,你就无法做到 . 你现在可以将 public 重命名为 my_public .

    如果我之后回到这个分支,一切都会完美,直到我最近的提交?

    如果您提交更改,Git会赢得't lose them. If you don' t提交您的更改,那么Git将非常努力不会覆盖您已完成的工作 . 这就是Git在这里第一次警告你的事情(当你试图切换分支时) .

  • 0

    这个微妙的任务有一个命令(永久删除未跟踪的文件)

    git clean -i
    

    然后 git pull 会这样做 .

  • 116

    很遗憾, git rm --cachedgit clean -d -fx "" 都没有为我做过 .

    我的解决方案最终是将我的分支推送到远程,克隆一个新的仓库,然后在新的仓库中进行合并 . 访问回购的其他人也必须这样做 .

    故事的道德:从一开始就使用 .gitignore 文件 .

  • 21

    如果要快速解决此问题,可以使用此命令:

    git checkout -f dev
    
  • 496

    对于那些需要比Scott Schafer’s answer更为深远的东西的人,

    git clean -f
    

    可能会奏效 . 我强烈建议跑步

    git clean --dry-run
    

    第一 . 该命令将输出Git将在您运行 git clean -f 时删除的文件列表,并可能为您省去无意中删除您不想要的内容的痛苦 .

    有关 git clean 的更多信息,请参见this Stack Oveflow answerthe docs .

  • 7

    这发生在一个 Windows 8 系统上,在命令提示符下使用Git . 我团队的其他成员使用 TFS ,我使用Microsoft的 git-tf 在TFS和我的本地Git存储库之间推/拉 .

    问题出现了一些 files that had been renamed only to change their case . 似乎发生了什么是这样的:

    • 文件以名称中的混合套管签入 .

    • 在稍后的提交中,文件名已更改为全部小写 .

    • git-tf最初得到大小写混合的文件 .

    • 当文件重命名为小写时,git-tf没有获取文件,因为对于Windows 8,这些文件名是等效的 .

    • 由于Git区分大小写,它抱怨我有不在源代码控制中的混合大小写文件 . 但是使用 git status ,我看不到任何更改,因为在Windows命令提示符下,这些文件名是等效的 .

    对我来说最简单的解决方案是:

    • git checkout a previous version 项目, well before those files were ever added .

    • 然后 git checkout the latest version 项目,具有正确的文件框 .

  • 2

    这对我有用 .

    1. git fetch --all
     2. git reset --hard origin/{branch_name}
    
  • 9

    在结账时遇到同样的问题基于早先的提交 . 由于未跟踪的文件,Git拒绝结账 .

    我找到了一个解决方案,我希望它也会对你有所帮助 .

    将受影响的目录添加到 .gitignore 并在它们上发出 $ git rm -r --cached 显然是不够的 .

    假设你想根据早期的提交K创建一个分支来测试一些东西并回到当前版本 . 我会按以下步骤进行:

    • 设置未跟踪文件:编辑 .gitignore 并对希望git忽略的文件和目录应用 $ git rm -r --cached . 将文件 .gitignore 本身添加到 .gitignore ,不要忘记发出 $ git rm -r --cached .gitignore . 这将确保git的忽略行为在之前的提交中保持不变 .

    • 提交您刚才所做的更改:

    $ git add -A
    $ git commit

    • 保存当前日志,否则您可能会遇到回到当前版本的问题

    $ git log > ../git.log

    • 硬重置为提交K.

    $ git reset --hard version_k

    • 根据提交K创建分支

    $ git branch commit_k_branch

    • 结帐到该分行

    $ git checkout commit_k_branch

    • 做你的东西并提交它

    • 再次结账回主人

    $ git checkout master

    • 再次重置为当前版本

    $ git reset current_version$ git reset ORIG_HEAD

    • 现在你可以很难重置HEAD

    git reset --hard HEAD

    注意!不要跳过倒数第二步(例如 $ git reset --hard ORIG_HEAD ),否则上面抱怨的未跟踪文件git会丢失 .

    我还确保git抱怨的文件没有被删除 . 我将它们复制到文本文件并发出命令 $ for i in $(cat ../test.txt); do ls -ahl $i; done

    如果您再次检查上述分支,请不要忘记发出 $ git status 以确保不会出现不需要的更改 .

  • 2

    我也遇到了类似的问题,我尝试了上面发布的所有解决方案,但它没有用

    这个问题是在 renamed 我的 onMusicUpdateListener.javadevelop 分支中引起的 .

    现在 masteronMusicUpdateListener.javadevelopOnMusicUpdateListener.java 具有相同的文件

    现在每当我切换到掌握时,它都给了我一个错误

    The following untracked working tree files would be overwritten by checkout
    

    然后它 aborted .

    为了解决这个问题,我强行 checked out master 分支,然后将 onMusicUpdateListener.java 重命名为 OnMusicUpdateListener.javacommitted 然后用 develop 分支 merged .

    然后我将我的 develop 分支 merging 更新为 master ,现在一切恢复正常,问题解决了 .

  • 0

    这两个函数(git rm --cached,git checkout -f another-branch)对我不起作用 .

    相反,我在物理上删除了文件(在eclipse中),正如Git告诉你的那样;请在移动分支之前移动或移除它们 .

    然后我添加/提交它 .

    然后我拉了它工作!

  • 2

    在我的情况下 git rm --cached 没有用 . 但我得到了 git rebase

  • 8

    这可能是一个许可问题,

    改变所有权,

    sudo chown -v -R usr-name:group-name folder-name
    
  • 0

    可能会出现2个具有相同名称但不同情况的文件 .

    您可以删除这些文件或重命名 . 例如:

    Pdf.html.twig (The GOOD one)
    
    pdf.html.twig (The one I deleted)
    
  • 9

    Move files, instead of delete

    避免删除文件的一种方法是移动它们 . 例如:

    cd "`git rev-parse --show-toplevel`"
    git checkout 2>&1 | while read f; do [ ! -e "$f" ] || mv "$f" "$f".bak; done
    
  • 3

    如果您已在本地重命名文件然后执行 pull ,则会显示该错误消息 .

  • 875

    这很容易解决,git说你在两个分支中都有相同的文件,因此你必须从master分支中删除特定的文件,然后你就可以合并:

    git合并“你的分支”

    I hope it works for you, I just solved my error. my error was:

    错误:以下未跟踪的工作树文件将被合并覆盖:.vs / slnx.sqlite请在合并之前移动或删除它们 . 中止

    现在它正在运作!在我的情况下.vs / slnx.sqlite是由visual studio生成的,我需要在删除之前关闭它 .

  • 11

    在我的情况下,我看到这个错误,因为我使用的是流行的开源CMS,导致问题的目录是CMS写入的上传目录 .

    所以它说的是有些文件你没有,但你无法从版本控制中获得 .

    我正在 grab 现场网站上的所有文件到我的本地,然后我会把它检查到回购中,希望能解决这个问题 .

  • 1

    appname/gen/ 删除 .gitignore 文件以解决此问题 .

  • 8

    我只是去了文件系统并直接删除了文件,然后继续使用git checkout并且它工作正常 .

    我已经多次出现问题,这可能与开发人员做删除,推送,重新添加,推送或某些此类事情有关 .

  • 0

    大多数答案都考虑删除或删除文件,这是一种简单的方法 . 但有时你不想摆脱本地文件 . 但是与策略合并,所以git有解决方案也是;

    git merge --strategy=ours master
    
  • 1

    只需删除文件或重命名即可 .

    例如

    $ git pull
    Enter passphrase for key '/c/Users/PC983/.ssh/id_rsa':
    error: Your local changes to the following files would be overwritten by merge:
            ajax/productPrice.php
    Please commit your changes or stash them before you merge.
    error: The following untracked working tree files would be overwritten by merge:
            ajax/product.php
    Please move or remove them before you merge.
    Aborting
    Updating a04cbe7a..6aa8ead5
    

    我不得不重命名/删除 ajax/product.phpajax/produtPrice.php .

    别担心,git pull会把它们带回来 . 我建议你重命名它们而不是删除,因为你可能会松掉一些变化 .

    如果这没有帮助,那么你必须删除整个分支并再次创建它,然后执行 git pull origin remotebranch

  • 41

    为了保存修改后的文件并在以后使用修改后的内容 . 我尝试检查分支时和尝试重新绑定时发现此错误 . 试试Git藏匿

    git stash

相关问题