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

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

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

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


当前回答

2个名称相同但情况不同的文件可能会出现问题。

您可以删除这些文件中的一个或重命名它。例:

Pdf.html.twig (The GOOD one)

pdf.html.twig (The one I deleted)

其他回答

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 checkout -f dev

我在根据之前的提交检出到分支时遇到了同样的问题。Git因为未跟踪文件而拒绝签出。

我找到了一个解决办法,希望它也能帮助到你。

将受影响的目录添加到.gitignore并在其中缓存$ git rm -r——显然是不够的。

假设你想基于之前的commit K创建一个分支来测试一些东西,然后回到当前版本。我会按照以下步骤来做:

Setup the untracked files: edit the .gitignore and apply $ git rm -r --cached on the files and directories you want the git to ignore. Add also the file .gitignore itself to .gitignoreand don't forget to issue $ git rm -r --cached .gitignore. This will ensure the the ignore behavior of git leaves the same in the earlier commits. Commit the changes you just made: $ git add -A $ git commit Save the current log, otherwise you may get problems coming back to the current version $ git log > ../git.log Hard reset to the commit K $ git reset --hard version_k Create a branch based on the commit K $ git branch commit_k_branch Checkout into that branch $ git checkout commit_k_branch Do your stuff and commit it Checkout back into master again $ git checkout master Reset to the current Version again $ git reset current_version or $ git reset ORIG_HEAD Now you can reset hard to the HEAD git reset --hard HEAD

注意!不要跳过倒数第二步(例如:$ git reset——hard ORIG_HEAD )否则git上面抱怨的未跟踪文件将会丢失。

我还确保git抱怨的文件没有被删除。我将它们复制到一个文本文件中,并在$(cat ../test.txt)中发出命令$ for I;做ls -ahl $i;完成

如果再次签出到上面提到的分支,不要忘记发出$ git状态,以确保没有不必要的更改出现。

警告:它会删除未跟踪的文件,所以这不是一个很好的回答所提出的问题。

我也打出了这条信息。以我为例,我不想保留这些文件,所以这对我来说很有效:

Git 2.11及更新版本

git clean  -d  -f .

变老

git clean  -d  -f ""

如果你还想删除被git忽略的文件,那么执行下面的命令。

警告! !这很可能会破坏你的项目,只有当你100%知道你在做什么时才使用

Git 2.11及更新版本

git clean  -d  -fx .

变老

git clean  -d  -fx ""

http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

-x意味着被忽略的文件以及git不知道的文件也会被删除。 -d表示除未跟踪的文件外,还删除未跟踪的目录。 -f命令用于强制运行。