所以我在我的 .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/*
我怎样才能让它工作,这样我就可以在不删除这些文件的情况下切换分支?
如果我进行更改,会影响这些文件吗?换句话说,如果我之后回到这个分支,直到我最近的提交,一切都会完美吗?
我不想丢失这些文件,我只是不想跟踪它们。
警告:它会删除未跟踪的文件,所以它不是一个很好的答案。
我也点击了这条消息。就我而言,我不想保留文件,所以这对我有用:
git 2.11 及更新版本
git clean -d -f .
较旧的 git
git clean -d -f ""
如果您还想删除被 git 忽略的文件,请执行以下命令。
被警告!!!这很可能会破坏您的项目,只有在您 100% 知道自己在做什么的情况下才使用
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 是强制它运行所必需的。
警告:这将删除未编入索引的本地文件
强制它:git checkout -f another-branch
error: pathspec 'mybranch' did not match any file(s) known to git.
似乎您希望忽略这些文件,但它们已经被提交。 .gitignore 对已在 repo 中的文件没有影响,因此需要使用 git rm --cached
删除它们。 --cached
将阻止它对您的工作副本产生任何影响,并且它只会在您下次提交时标记为已删除。从存储库中删除文件后,.gitignore 将阻止再次添加它们。
但是您的 .gitignore 存在另一个问题,您过度使用通配符并导致它的匹配程度低于您的预期。相反,让我们更改 .gitignore 并尝试一下。
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
git rm --cached
不会有什么不同,这些文件在当前分支中不存在。对于这个错误,我认为用户需要遵循@Greg Hewgill 的回答 - “将它们移出工作副本,切换分支,然后将它们移回”。
git rm -r --cache test/node_modules
时,如何用 fatal: pathspec 'test/node_modules' did not match any files
解决 your files would be overwritten
?由于被覆盖的消息,我无法提取并且无法删除,因为 git 找不到它们(它们在那里)
git rm
删除该分支中的文件并提交。最后,您可以将文件移回,它们将不再被覆盖。
如果您使用的是 OS X,可能是因为文件名的某些字符大小写发生了变化。尝试设置以下配置选项:
git config core.ignorecase true
git rebase
,它也可以工作。谢谢。
这对我有用。
1. git fetch --all
2. git reset --hard origin/{branch_name}
Git 告诉您它想要创建文件(名为 public/system/images/9/...
等),但您在该目录中已经有现有的文件,没有被 Git 跟踪。也许其他人将这些文件添加到 Git 存储库,这是您第一次切换到该分支?
您的 develop
分支中的这些文件而不是当前分支中的这些文件可能是有原因的。您可能需要询问您的合作者为什么会这样。
我怎样才能让它工作,这样我就可以在不删除这些文件的情况下切换分支?
如果不使文件以某种方式消失,您将无法做到这一点。您现在可以将 public
重命名为 my_public
或其他名称。
如果我之后回到这个分支,直到我最近的提交,一切都会完美吗?
如果您提交更改,Git 不会丢失它们。如果您不提交更改,那么 Git 会非常努力地不覆盖您所做的工作。这就是 Git 在第一个实例中警告您的内容(当您尝试切换分支时)。
这个微妙的任务有一个命令(永久删除未跟踪的文件)
git clean -i
然后 git pull
就可以了。
这两个功能
git rm --cached git checkout -f 另一个分支
对我不起作用。
相反,我按照 Git 告诉您的方式实际删除了该文件(在 Eclipse 中);
Please move or remove them before you can switch branches.
然后我添加/提交它。
然后我拉了它,它起作用了!
对于那些需要比 Scott Schafer’s answer 更深远的东西的人,
git clean -f
可能会起作用。我强烈建议跑步
git clean --dry-run
第一的。如果您运行 git clean -f
,该命令将输出 Git 将删除的文件列表,并且可能会为您免去无意中删除您不想删除的内容的痛苦。
有关 git clean
的更多信息,请参阅 this Stack Oveflow answer 或 the docs。
不幸的是,git rm --cached
或 git clean -d -fx ""
都没有为我做这件事。
我的解决方案最终是将我的分支推送到远程,克隆一个新的 repo,然后在新的 repo 中进行合并。其他访问 repo 的人也必须这样做。
故事的寓意:从一开始就使用 .gitignore
文件。
如果你想快速解决这个问题,你可以使用这个命令:
git checkout -f dev
.gitignore
afaik 无关时,这对我有帮助。
在根据早期提交签出分支时,我遇到了同样的问题。由于未跟踪的文件,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 做你的事情并提交它 再次签出到 master $ 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
以确保不会出现不需要的更改。
这发生在我的 Windows 8 系统上,在命令提示符下使用 Git。我团队的其他成员使用 TFS,我使用 Microsoft 的 git-tf 在 TFS 和我的本地 Git 存储库之间推/拉。
问题的出现是由于一些文件被重命名只是为了改变它们的大小写。似乎发生的事情是这样的:
这些文件在其名称中使用混合大小写签入。
在后来的提交中,文件名全部更改为小写。
git-tf 最初得到混合大小写的文件。
当文件重命名为小写时, git-tf 没有获取文件,因为对于 Windows 8,这些文件名是等效的。
由于 Git 区分大小写,它抱怨我有不在源代码控制中的混合大小写文件。但是使用 git status,我看不到任何更改,因为在 Windows 命令提示符下,这些文件名是等效的。
对我来说最简单的解决方案是:
git checkout 项目的早期版本,在这些文件被添加之前。
然后 git checkout 项目的最新版本,文件大小写正确。
就我而言,问题出在子模块上。 master
与向项目添加新子模块的另一个分支合并。我试图签出的分支没有它,这就是为什么 git 抱怨未跟踪的文件,而其他建议的解决方案都不适合我。我强迫结帐到我的新分支,然后拉了主人。
git checkout -f my_branch
git pull 起源大师
git子模块更新--init
这个命令解决了我的问题:
git add *
git stash
git pull
在我的情况下,git rm --cached
不起作用。但我得到了一个git rebase
我也面临类似的问题,我尝试了上面发布的所有解决方案,但没有奏效
问题是我在 develop
分支中重命名我的 onMusicUpdateListener.java
为 OnMusicUpdateListener.java
时引起的。
现在 master
拥有 onMusicUpdateListener.java
,而 develop
拥有与 OnMusicUpdateListener.java
相同的文件
现在,每当我切换到 master 时,它都会给我一个错误
The following untracked working tree files would be overwritten by checkout
然后是 aborted
。
为了解决这个问题,我强行checked out
master
分支,然后将我的 onMusicUpdateListener.java
重命名为 OnMusicUpdateListener.java
,committed
然后将 merged
与 develop
分支重命名。
然后我通过 merging
将我的 develop
分支更新为 master
,现在一切恢复正常,问题已解决。
这很容易解决,git 说你在两个分支中都有相同的文件,因此你必须从 master 分支中删除特定文件,然后你才能合并:
git merge "your branch"
我希望它对你有用,我刚刚解决了我的错误。我的错误是:
error: The following untracked working tree files would be overwritten by merge:
.vs/slnx.sqlite
Please move or remove them before you merge.
Aborting
现在它正在工作!在我的情况下,.vs/slnx.sqlite
是由 Visual Studio 生成的,我需要在删除它之前关闭它。
swiftpm/Package.resolved
有同样的问题,这对我有用。
这可能是权限问题,
改变所有权,
sudo chown -v -R usr-name:group-name folder-name
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
如果您已在本地重命名文件然后执行 pull
,它将显示该错误消息。
就我而言,我看到此错误是因为我使用的是流行的开源 CMS,而导致问题的目录是 CMS 写入的上传目录。
所以它的意思是有些文件你没有,但你不能从版本控制中得到。
我正在将所有文件从实时站点抓取到我的本地,然后我会将其签入 repo,希望这可以解决问题。
从 appname/gen/ 中删除 .gitignore 文件以解决此问题。
我只是去了文件系统并直接删除了文件,然后继续使用 git checkout 并且它起作用了。
我已经多次出现该问题,这可能与开发人员进行删除、推送、重新添加、推送或类似的事情有关。
大多数答案都考虑删除或删除文件,这是最简单的方法。但有时您不想摆脱本地文件。但是与策略合并,所以 git 也有解决方案;
git merge --strategy=ours master
只需删除文件或重命名它们。
例如
$ 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 pull origin remotebranch
为了保存修改后的文件,以便以后使用修改后的内容。我在尝试检查分支和尝试变基时发现了这个错误。尝试 Git 存储
git stash
检查是否有任何文件夹名称包含“/”或任何特殊符号,然后重命名该文件夹。然后,您只需将存储库克隆到另一个位置。
一个简单的解决方案可能是:只需确保您位于 GitBash
中的正确工作目录中。如果用户尝试在其文件夹层次结构中合并太高的目录,则几乎每次都会出现该消息。
例子:
/workspace/git/myBashSourceFolder/myProjectSourcefolder
场景:用户在 git-folder
中克隆了 repo 他在 Eclipse 中创建了一个新的 Java 项目,导入了克隆的 repo。 Eclipse 在他的本地项目中将 myProjectSourceFolder 设置为源文件夹。因此用户在 git bash 中输入它并从那里推送、拉取和提交他的项目。因此 git 同步 myProjectSourceFolder
-但在他的历史记录中没有关于 myBashSourceFolder 的记录。因此,如果用户下次尝试从那里同步,而不是他之前工作的文件夹,来自 myBashSourceFolder 的推/拉/合并将产生给定的输出。
解决方案:输入正确的文件夹并再次尝试拉取。在我遇到的几乎每次,这个解决方案都很好:)
git clean -dfxn
或git clean -dfx --dry-run
-x
选项伤害了我