所以我在.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 回答
就我而言,问题在于子模块 .
master
与另一个分支合并,该分支为项目添加了一个新的子模块 . 我试图检查的分支没有't have it, that'为什么git抱怨未跟踪的文件,而其他任何建议的解决方案都没有为我工作 . 我强行结帐到我的新分店,拉了主人 .git checkout -f my_branch
git pull origin master
git submodule update --init
您似乎希望忽略这些文件,但它们已经被提交了 . .gitignore对已存在于repo中的文件没有影响,因此需要使用
git rm --cached
删除它们 .--cached
将阻止它对您的工作副本产生任何影响,并且它将在下次提交时标记为已删除 . 从repo中删除文件后,.gitignore将阻止再次添加它们 .但是你的.gitignore还有另外一个问题,你过度使用通配符并导致它匹配的次数少于预期 . 而是让我们改变.gitignore并试试这个 .
警告:它会删除未跟踪的文件,因此对提出的问题不是一个很好的答案 .
我也点击了这条消息 . 在我的情况下,我不想保留文件,所以这对我有用:
git 2.11和更新版本
年长的git
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
表示也会删除被忽略的文件以及git未知的文件 .-d
表示除了未跟踪的文件外,还删除未跟踪的目录 .需要
-f
才能强制它运行 .Warning: This will delete the local files that are not indexed
强迫它:
git checkout -f another-branch
如果您使用的是OS X,则可能是因为文件的名称已更改了某些字符 . 尝试设置以下配置选项:
Git告诉你它想要创建文件(名为
public/system/images/9/...
等),但是你已经在该目录中有了Git没有跟踪的现有文件 . 也许其他人将这些文件添加到Git存储库中,这是您第一次切换到该分支?可能有一个原因导致您的
develop
分支中的文件,而不是当前分支中的文件 . 你可能不得不问你的合作者为什么会这样 .如果不使文件以某种方式消失,你就无法做到 . 你现在可以将
public
重命名为my_public
.如果您提交更改,Git会赢得't lose them. If you don' t提交您的更改,那么Git将非常努力不会覆盖您已完成的工作 . 这就是Git在这里第一次警告你的事情(当你试图切换分支时) .
这个微妙的任务有一个命令(永久删除未跟踪的文件)
然后
git pull
会这样做 .很遗憾,
git rm --cached
或git clean -d -fx ""
都没有为我做过 .我的解决方案最终是将我的分支推送到远程,克隆一个新的仓库,然后在新的仓库中进行合并 . 访问回购的其他人也必须这样做 .
故事的道德:从一开始就使用
.gitignore
文件 .如果要快速解决此问题,可以使用此命令:
对于那些需要比Scott Schafer’s answer更为深远的东西的人,
可能会奏效 . 我强烈建议跑步
第一 . 该命令将输出Git将在您运行
git clean -f
时删除的文件列表,并可能为您省去无意中删除您不想要的内容的痛苦 .有关
git clean
的更多信息,请参见this Stack Oveflow answer或the docs .这发生在一个 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 项目,具有正确的文件框 .
这对我有用 .
在结账时遇到同样的问题基于早先的提交 . 由于未跟踪的文件,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
$ git reset --hard version_k
$ git branch commit_k_branch
$ git checkout commit_k_branch
做你的东西并提交它
再次结账回主人
$ git checkout master
$ git reset current_version
或$ git reset ORIG_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
以确保不会出现不需要的更改 .我也遇到了类似的问题,我尝试了上面发布的所有解决方案,但它没有用
这个问题是在 renamed 我的
onMusicUpdateListener.java
到develop
分支中引起的 .现在
master
有onMusicUpdateListener.java
和develop
与OnMusicUpdateListener.java
具有相同的文件现在每当我切换到掌握时,它都给了我一个错误
然后它
aborted
.为了解决这个问题,我强行
checked out
master
分支,然后将onMusicUpdateListener.java
重命名为OnMusicUpdateListener.java
,committed
然后用develop
分支merged
.然后我将我的
develop
分支merging
更新为master
,现在一切恢复正常,问题解决了 .这两个函数(git rm --cached,git checkout -f another-branch)对我不起作用 .
相反,我在物理上删除了文件(在eclipse中),正如Git告诉你的那样;请在移动分支之前移动或移除它们 .
然后我添加/提交它 .
然后我拉了它工作!
在我的情况下
git rm --cached
没有用 . 但我得到了git rebase
这可能是一个许可问题,
改变所有权,
可能会出现2个具有相同名称但不同情况的文件 .
您可以删除这些文件或重命名 . 例如:
Move files, instead of delete
避免删除文件的一种方法是移动它们 . 例如:
如果您已在本地重命名文件然后执行
pull
,则会显示该错误消息 .这很容易解决,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生成的,我需要在删除之前关闭它 .
在我的情况下,我看到这个错误,因为我使用的是流行的开源CMS,导致问题的目录是CMS写入的上传目录 .
所以它说的是有些文件你没有,但你无法从版本控制中获得 .
我正在 grab 现场网站上的所有文件到我的本地,然后我会把它检查到回购中,希望能解决这个问题 .
从 appname/gen/ 删除 .gitignore 文件以解决此问题 .
我只是去了文件系统并直接删除了文件,然后继续使用git checkout并且它工作正常 .
我已经多次出现问题,这可能与开发人员做删除,推送,重新添加,推送或某些此类事情有关 .
大多数答案都考虑删除或删除文件,这是一种简单的方法 . 但有时你不想摆脱本地文件 . 但是与策略合并,所以git有解决方案也是;
只需删除文件或重命名即可 .
例如
我不得不重命名/删除 ajax/product.php 和 ajax/produtPrice.php .
别担心,git pull会把它们带回来 . 我建议你重命名它们而不是删除,因为你可能会松掉一些变化 .
如果这没有帮助,那么你必须删除整个分支并再次创建它,然后执行
git pull origin remotebranch
为了保存修改后的文件并在以后使用修改后的内容 . 我尝试检查分支时和尝试重新绑定时发现此错误 . 试试Git藏匿
git stash