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

那就拉吧。

其他回答

一个简单的解决方案是: 只需确保您在github中的正确工作目录中。 如果用户试图合并文件夹层次结构中太高的目录,几乎每次都会出现该消息。

例子:

/workspace/git/myBashSourceFolder/myProjectSourcefolder

Scenario: User cloned repo in git-folder he created a new Java Project in Eclipse, imported the cloned repo. Eclipse set myProjectSourceFolder as Source Folder in his local Project. therefore the User entered it in git bash and pushed, pulled and commited his project from there. git syncs therefore myProjectSourceFolder - but has no record in his history for myBashSourceFolder. Therefore a push / pull /merge from myBashSourceFolder will produce the given output, if User tries to sync from there next time, instead of the folder he worked before.

解决方案:输入正确的文件夹并再次尝试拉。几乎在每一个 我遇到的时候,这个解决方案工作得很好:)

在我的情况下,问题是由于文件名称从订阅更改。ts到Subscribe.ts。

所以我检查我的分支开发人员是否与我所在的当前分支同步。

(电流支路主)

Git合并开发 已经是最新的了 Git分支-d dev Git checkout -b dev

.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 clean -i

那就拉吧。

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

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

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

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

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

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