所以我在。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/*

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

如果我做了更改,会影响那些文件吗?换句话说,如果我之后回到这个分支,在我最近一次提交之前,一切都是完美的吗?

我不想弄丢那些文件,我只是不想让他们被追踪到。


当前回答

这对我很管用。

 1. git fetch --all
 2. git reset --hard origin/{branch_name}

其他回答

在我的例子中,我看到这个错误是因为我使用的是一个流行的开源CMS,导致问题的目录是CMS写入的上传目录。

它说的是有些文件你没有,但你不能从版本控制中获得。

我抓取所有的文件从现场到我的本地,然后我会检查这到回购,希望这解决了问题。

只需删除文件或重命名它们。

如。

$ 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/ productprice .php。

别担心,少壮派会把他们拉回来的。我建议您重命名它们,而不是删除它们,因为您可能会失去一些更改。

如果这没有帮助,那么你必须删除整个分支并重新创建它,然后执行git pull origin remotebranch

这两个函数

Git rm——缓存 Git checkout -f另一个分支

对我不起作用。

相反,我按照Git告诉你的那样,在eclipse中物理删除了该文件;

Please move or remove them before you can switch branches.

然后添加/提交。

然后我拉了一下,成功了!

我只是去了文件系统,直接删除了文件,然后继续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/