所以我在。gitignore文件中添加了一个文件夹。

一旦我输入git状态,它就会告诉我

# 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 clean -f

可能会起作用。我强烈建议跑步

git clean --dry-run

第一。如果您运行Git clean -f,该命令将输出Git将删除的文件列表,这可能会避免您无意中删除不想删除的文件。

有关git clean的更多信息,请参阅堆栈溢出的回答或文档。

其他回答

检查是否有文件夹名包含'/'或任何特殊符号,然后重命名该文件夹。 然后只需将存储库克隆到另一个位置。

Git告诉你它想要创建文件(命名为public/system/images/9/…etc),但是你在那个目录下已经有了Git没有跟踪的文件。也许其他人将这些文件添加到Git存储库中,而这是您第一次切换到该分支?

这些文件在开发分支中而不在当前分支中可能是有原因的。你可能要问你的合作者为什么会这样。

我如何让这个工作,所以我可以切换分支而不删除这些文件?

如果不让文件消失,你就不能这么做。你现在可以把public重命名为my_public或者别的什么。

如果我之后回到这个分支,一切都会像我最近提交的那样完美吗?

如果您提交了更改,Git不会丢失它们。如果您没有提交更改,那么Git会尽量不覆盖您所做的工作。这就是Git在这里的第一个实例(当您尝试切换分支时)警告您的内容。

.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 add * 
git stash
git pull

我也面临着类似的问题,我尝试了上面发布的所有解决方案,但都不起作用

当我在开发分支中将我的onmusicupdatelister .java重命名为onmusicupdatelister .java时,导致了这个问题。

master有onmusicupdatelister .java 和develop有和onmusicupdatelister .java相同的文件

现在,每当我切换到master,它就会给我一个错误

The following untracked working tree files would be overwritten by checkout

然后它中止了。

为了解决这个问题,我强制检查了主分支 然后将我的onmusicupdatelister .java重命名为onmusicupdatelister .java,提交它,然后将其合并到开发分支。

然后我更新了我的开发分支合并到主,现在一切恢复正常,问题解决了。