gitignore and “The following untracked working tree files would be overwritten by checkout”
所以我在.gitignore文件中添加了一个文件夹。
一旦我做了一个
1 2 | # On branch latest nothing to commit (working directory clean) |
但是,当我尝试更改分支时,会得到以下信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | 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文件如下所示:
1 2 3 4 5 6 7 | .bundle .DS_Store db/*.sqlite3 log/*.log tmp/**/* public/system/images/* public/system/avatars/* |
我如何才能使这个工作,这样我就可以在不删除这些文件的情况下切换分支?
如果我做了更改,它会影响那些文件吗?换言之,如果我后来回到这个分支,所有的事情都会和我最近的承诺一样完美吗?
我不想丢失那些文件,我只是不想跟踪它们。
警告:它将删除未跟踪的文件,因此对于提出的问题来说,这不是一个很好的答案。
我也点击了这个信息。在我的情况下,我不想保留这些文件,所以这对我很有用:
Git 2.11及更高版本1 | git clean -d -f . |
老Git
1 | git clean -d -f"" |
如果还想删除git忽略的文件,请执行以下命令。
被警告!!!!这很可能会破坏您的项目,仅当您100%知道自己在做什么时才使用。Git 2.11及更高版本1 | git clean -d -fx . |
老Git
1 | git clean -d -fx"" |
网址: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
强制执行:
似乎您希望忽略这些文件,但它们已被提交。.gitignore对已在回购中的文件没有影响,因此需要使用
但是你的.gitignore还有另一个问题,你过度使用通配符,导致它的匹配比你期望的要少。改为更改.gitignore并尝试此操作。
1 2 3 4 5 6 7 | .bundle .DS_Store db/*.sqlite3 log/*.log tmp/ public/system/images/ public/system/avatars/ |
如果您使用的是OS X,可能是因为文件名具有某些字符的更改大小写。尝试设置以下配置选项:
1 | git config core.ignorecase true |
Git告诉您它想要创建文件(名为
可能有一个原因,为什么这些文件在您的
how do I get this working so I can switch branches without deleting those files?
你不能不让文件消失就这么做。你现在可以把
if I came back to this branch afterwards would everything be perfect as up to my latest commit?
如果您提交更改,Git不会丢失它们。如果您不提交您的更改,那么Git将努力避免覆盖您所做的工作。这就是Git在这里第一次警告您的(当您尝试切换分支时)。
有一个命令可以执行这个微妙的任务(永久删除未跟踪的文件)
1 | git clean -i |
那么以东十一〔十八〕就可以了。
这对我有用。
1 2 | 1. git fetch --all 2. git reset --hard origin/{branch_name} |
不幸的是,
我的解决方案最终是将我的分支推到远程,克隆一个新的回购,然后在新的回购中进行合并。其他访问回购协议的人也必须这样做。
故事的寓意:从一开始就使用
对于那些需要比斯科特·谢弗的答案更不深远的东西的人,
1 | git clean -f |
可能有效。我强烈建议跑步
1 | git clean --dry-run |
第一。该命令将输出一个文件列表,如果您运行
有关
如果要快速解决此问题,可以使用以下命令:
1 | git checkout -f dev |
在Windows8系统上,我在命令提示符下使用git时发生了这种情况。我的其他团队使用TFS,我使用Microsoft的git tf在TFS和本地git存储库之间推/拉。
这个问题是由于一些文件被重新命名只是为了改变它们的情况。似乎是这样的:
- 文件以混合大小写的形式签入。
- 在稍后的提交中,文件名更改为所有小写。
- gittf最初得到的文件是混合大小写的。
- 当文件被重命名为小写时,gittf没有得到这些文件,因为对于Windows8,这些文件名是等效的。
- 因为Git是区分大小写的,所以它抱怨我有不在源代码管理中的混合大小写文件。但是使用
git status ,我看不到任何更改,因为在windows命令提示符中,这些文件名是等效的。
对我来说,最简单的解决方案是:
git checkout 是该项目的早期版本,早在添加这些文件之前。- 然后是
git checkout 最新版本的项目,具有正确的文件大小写。
在基于先前提交的分支进行签出时,我遇到了同样的问题。由于文件未跟踪,Git拒绝签出。
我找到了一个解决办法,希望它也能帮助你。
将受影响的目录添加到
假设您想让一个基于分支的提交k测试一些东西并返回到当前版本。我将按以下步骤进行:
设置未跟踪文件:编辑
提交刚才所做的更改:
保存当前日志,否则返回当前版本时可能会出现问题。
硬重置为提交k
基于提交k创建分支
到那家分行结帐
做你的事情并承诺
再次签回主服务器
再次重置为当前版本
现在你可以硬着头复位了
注意!不要跳过下一步到最后一步(如
我还确保Git抱怨的文件没有被删除。我把它们复制到一个文本文件中,然后发出命令
如果您再次向上述分支机构结账,请不要忘记发出
在我的例子中,问题出在子模块上。
git checkout -f my_branch git pull origin master git submodule update --init
我也面临着类似的问题,我尝试了上面所有的解决方案,但都不起作用。
这个问题是我在
现在
现在每当我转向大师,它都会给我一个错误。
1 | The following untracked working tree files would be overwritten by checkout |
然后是1号[7号]。
为了解决这一问题,我强行将
然后我用
这两个函数(git rm——缓存的,git checkout-f另一个分支)不适用于我。
相反,我实际删除了文件(在Eclipse中),正如Git告诉您要做的那样;请在切换分支之前移动或删除它们。
然后我添加/提交它。
然后我拉了一下,它开始工作了!
2个同名但大小写不同的文件可能是问题所在。
您可以删除这些文件中的一个或重命名它。前任:
1 2 3 | Pdf.html.twig (The GOOD one) pdf.html.twig (The one I deleted) |
移动文件,而不是删除
避免删除文件的一种方法是移动文件。例如:
1 2 | cd"`git rev-parse --show-toplevel`" git checkout 2>&1 | while read f; do [ ! -e"$f" ] || mv"$f""$f".bak; done |
这可能是许可问题,
改变所有权,
1 | sudo chown -v -R usr-name:group-name folder-name |
在我的例子中,
如果您在本地重命名了一个文件,然后执行
这很容易解决,Git说在两个分支中有相同的文件,因此必须从主分支中删除特定的文件,然后才能合并:
Git合并"你的分支"
我希望它对你有用,我刚刚解决了我的错误。我的错误是:
错误:以下未跟踪的工作树文件将被合并覆盖:VS/SLNX.QLITE合并前请移动或删除它们。流产
现在开始工作了!在我的例子中,.vs/slnx.sqlite是由Visual Studio生成的,我需要在删除它之前关闭它。
只需删除或重命名文件即可。
例如
1 2 3 4 5 6 7 8 9 10 | $ 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.php和ajax/produtprice.php。
别担心,Git Pull会带他们回来的。我建议您重命名它们,而不是删除它们,因为您可能会丢失一些更改。
如果这不起作用,那么您必须删除整个分支并重新创建它,然后执行
大多数答案都考虑删除或删除文件,这是一种简单的方法。但有时你不想删除本地文件。但与策略合并,所以Git也有解决方案;
1 | git merge --strategy=ours master |
从appname/gen/中删除.gitignore文件以解决此问题。
在我的例子中,我看到这个错误是因为我使用了一个流行的开源CMS,导致问题的目录是CMS写入的上载目录。
所以它所说的是,有些文件是你没有的,但是你不能从版本控制中得到的。
我将把所有的文件从现场抓取到本地,然后我将把这些文件签入repo,希望这样可以解决问题。
以便保存修改的文件并在以后使用修改的内容。我在尝试签出分支和尝试重新平衡时发现此错误。尝试Git Stash
我刚进入文件系统,直接删除了文件,然后继续使用git签出,它工作正常。
我已经多次遇到这个问题,可能与执行删除、推送、重新添加、推送等操作的开发人员有关。