所以我在.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/*
我如何使这个工作,所以我可以切换分支而不删除这些文件?
如果我进行更改,它会影响这些文件吗?换句话说,如果我之后回到这个分支,那么一切都是完美的,直到我最近的提交?
我不想丢失那些文件,我只是不希望它们被跟踪。
您似乎希望忽略这些文件,但它们已经被提交了。 .gitignore对已存在于repo中的文件没有影响,因此需要使用git rm --cached
删除它们。 --cached
将阻止它对您的工作副本产生任何影响,它将在下次提交时标记为已删除。从repo中删除文件后,.gitignore将阻止再次添加它们。
但是你的.gitignore还有另外一个问题,你过度使用通配符并导致它匹配的次数少于预期。而是让我们改变.gitignore并试试这个。
.bundle
.DS_Store
db/*.sqlite3
log/*.log
tmp/
public/system/images/
public/system/avatars/
如果要快速解决此问题,可以使用此命令:
git checkout -f dev
基于先前的提交签出分支时,我遇到了同样的问题。由于未跟踪的文件,Git拒绝结账。
我找到了一个解决方案,我希望它也能帮到你。
将受影响的目录添加到.gitignore
并在其上发布$ git rm -r --cached
显然是不够的。
假设你想根据早期的提交K创建一个分支来测试一些东西并回到当前版本。我会按以下步骤进行:
.gitignore
并在您希望git忽略的文件和目录上应用$ git rm -r --cached
。添加文件.gitignore
本身到.gitignore
and不要忘记发出$ 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
以确保不会出现不需要的更改。
在Windows 8系统上发生这种情况,在命令提示符下使用Git。我团队的其他成员使用TFS,我使用Microsoft的git-tf在TFS和我的本地Git存储库之间进行推送/拉取。
问题出现是由于一些文件已经重命名只是为了改变他们的情况。似乎发生了什么是这样的:
git status
,我看不到任何变化,因为在Windows命令提示符下,这些文件名是等效的。对我来说最简单的解决方案是:
git checkout
是该项目的先前版本,远在这些文件被添加之前。git checkout
项目的最新版本,具有正确的文件框。就我而言,问题在于子模块。 master
与另一个分支合并,为项目添加了一个新的子模块。我试图检查的分支没有它,这就是为什么git抱怨未跟踪的文件,而其他任何建议的解决方案都没有为我工作。我强行结帐到我的新分店,拉了主人。
git checkout -f my_branch
git pull origin master
git submodule update --init
在我看来,git rm --cached
没有用。但我得到了git rebase
我也遇到了类似的问题,我尝试了上面发布的所有解决方案,但它没有用
当我在onMusicUpdateListener.java
分支中将我的OnMusicUpdateListener.java
重命名为develop
时,问题就出现了。
现在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
,committed
它然后merged
它与develop
分支。
然后我通过develop
将我的merging
分支更新为master
,现在一切恢复正常,问题解决了。
这两个函数(git rm --cached,git checkout -f another-branch)对我不起作用。
相反,我实际上删除了文件(在eclipse中),正如Git告诉你的那样;请在移动分支之前移动或移除它们。
然后我添加/提交它。
然后我拉了它工作!
这可能是一个许可问题,
改变所有权,
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
我也点击了这条消息。在我的情况下,我不想保留文件,所以这对我有用:
git clean -d -f .
git clean -d -f ""
如果您还想删除git忽略的文件,请执行以下命令。
git clean -d -fx .
git clean -d -fx ""
http://www.kernel.org/pub/software/scm/git/docs/git-clean.html
-x
意味着被删除的文件也被删除以及git未知的文件。-d
表示除了未跟踪的文件外,还删除未跟踪的目录。-f
必须强制它运行。如果您已在本地重命名文件然后执行pull
,则会显示该错误消息。
这很容易解决,git说你在两个分支中都有相同的文件,因此你必须从master分支中删除特定文件,然后你就可以合并:
git合并“你的分支”
我希望它适合你,我只是解决了我的错误。我的错误是:
错误:以下未跟踪的工作树文件将被合并覆盖:.vs / slnx.sqlite请在合并之前移动或删除它们。中止
现在它正在运作!在我的情况下.vs / slnx.sqlite是由visual studio生成的,我需要在删除之前关闭它。
在我的情况下,我看到这个错误,因为我使用的是流行的开源CMS,导致问题的目录是CMS写入的上传目录。
所以它说的是有些文件你没有,但你无法从版本控制中获得。
我正在抓住现场网站上的所有文件到我的本地,然后我会把它检查到回购中,希望能解决这个问题。
从appname / gen /删除.gitignore文件以解决此问题。
我只是去了文件系统并直接删除了文件,然后继续使用git checkout并且它工作正常。
我已经多次出现问题了,它可能与开发人员做删除,推送,重新添加,推送或某些此类事情有关。
大多数答案都考虑删除或删除文件,这是一种简单的方法。但有时你不想摆脱本地文件。但是与策略合并,所以git也有解决方案;
git merge --strategy=ours master
只需删除文件或重命名即可。
EG
$ 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 stash
git stash
检查是否有任何带有“/”或任何特殊符号的文件夹名称,然后重命名该文件夹。然后,您只需将存储库克隆到另一个位置。
警告:这将删除未编制索引的本地文件
强迫它:git checkout -f another-branch
如果您使用的是OS X,则可能是因为文件的名称已更改了某些字符。尝试设置以下配置选项:
git config core.ignorecase true
Git告诉你它想要创建文件(名为public/system/images/9/...
等),但是你已经在该目录中有了Git没有跟踪的现有文件。也许其他人将这些文件添加到Git存储库中,这是您第一次切换到该分支?
可能有一个原因导致你的develop
分支中的文件,而不是你当前的分支。您可能需要询问您的合作者为什么会这样。
如何让这个工作,所以我可以切换分支而不删除这些文件?
如果不使文件以某种方式消失,你就无法做到。您现在可以将public
重命名为my_public
。
如果我之后回到这个分支,那么一切都是完美的,直到我最近的提交?
如果您提交更改,Git不会丢失它们。如果你没有提交你的更改,那么Git会非常努力地不要覆盖你所做的工作。这就是Git在这里第一次警告你的事情(当你试图切换分支时)。
这对我有用。
1. git fetch --all
2. git reset --hard origin/{branch_name}
这个微妙的任务有一个命令(永久删除未跟踪的文件)
git clean -i
然后git pull
会这样做。
不幸的是,git rm --cached
或git clean -d -fx ""
都没有为我做过。
我的解决方案最终是将我的分支推送到远程,克隆一个新的仓库,然后在新的仓库中进行合并。访问回购的其他人也必须这样做。
故事的道德:从一开始就使用.gitignore
文件。
对于那些需要比Scott Schafer’s answer不那么深远的东西的人,
git clean -f
可能会奏效。我强烈建议跑步
git clean --dry-run
第一。如果你运行git clean -f
,那个命令将输出Git将删除的文件列表,并且可以省去你无意中删除你不想要的东西的痛苦。
有关this Stack Oveflow answer的更多信息,请参阅the docs或git clean
。