Git rm - 缓存和结帐

时间:2015-11-26 12:06:28

标签: git

我发出了以下命令

git rm --cached .idea

在我的develop分支上,因为我不想跟踪ide配置文件。文件已从索引中删除,但它们仍然在文件系统上,这正是我最初的目标。

现在当我尝试签出另一个分支时,git失败了,因为它们仍然在另一个分支的索引中 - 这是预期的。

但是,我需要从任何分支的索引中删除这些文件,那么如何在分支机构上发出相同的git rm --cached命令,我无法结账?

2 个答案:

答案 0 :(得分:1)

面对同样的情况,我倾向于这样做,直到所有BRANCH_WHERE_FILE_REMAINS都消失。

git rebase BRANCH_WHERE_FILE_IS_REMOVED BRANCH_WHERE_FILE_REMAINS

注意:这不会导致检出.idea仍然存在的提交,因为rebase的挑选是基于已经删除文件的提交之后。

但是,请注意,如果您在任何时候执行git rebase --abort,则rebase将尝试返回到.idea仍在索引中的提交,并且您可能会遇到麻烦。 (在尝试之前,建议备份.idea。)

如果没有这样的分支,

BRANCH_WHERE_FILE_IS_REMOVED可以只是commit-id。

答案 1 :(得分:1)

如果其他分支上的文件与磁盘上未跟踪的文件相同,则可以git checkout -f,然后git rm --cached。如果没有,并且你想在没有git知识的情况下保存未跟踪的文件,你必须完全这样做:把它放在~/tmp或其他东西,清理git的视图,然后mv它回到存储库目录。另外,请立即将其放入.gitignore以避免错误地跟踪它。

相关问题