Git rm --cached and checkout

3
我已经发布了以下命令。
git rm --cached .idea

在我的develop分支上,因为我不想跟踪ide配置文件,所以这些文件已从索引中删除,但它们仍然存在于文件系统中,这正是我最初的目标。现在当我尝试切换到另一个分支时,git会失败,因为它们仍然在其他分支的索引中 - 这是预期的。然而,我需要从任何分支的索引中删除这些文件,那么我该如何对无法检出的分支发出相同的git rm --cached命令呢?
2个回答

1
面对相同的情况,我倾向于这样做,直到所有的BRANCH_WHERE_FILE_REMAINS都消失了。
git rebase BRANCH_WHERE_FILE_IS_REMOVED BRANCH_WHERE_FILE_REMAINS

注意:这不会导致检出保留了.idea的提交,因为rebase的cherry-picking是基于已删除该文件的提交之后的。
但是请注意,如果您在任何时候执行git rebase --abort,rebase将尝试返回到仍然在索引中的.idea的提交,并且您可能会遇到麻烦。(建议在尝试之前备份.idea。)
如果没有这样的分支,BRANCH_WHERE_FILE_IS_REMOVED可以只是提交ID。

无法工作。我正在develop分支上(带有.idea文件),并发出git rebase master命令(master是没有这些文件的分支),但我收到了“错误:以下未跟踪的工作树文件将被覆盖”的提示。 - brazorf
你确定这不是“我正在开发(没有.idea文件的分支)并执行git rebase master(master是有文件的分支)…”吗?因为这更符合你最初的问题以及你收到的错误信息。 - antak
无论如何,您需要发出的命令是相反的。 它是git rebase develop master。但是请注意,这会将master重新安排在develop上面,而我非常确定您不想要这样做。以上答案实际上假设您所说的“现在当我尝试检出另一个分支”是指其他功能分支,而不是您的主干。实际上,如果您想要检出主干以便发出git merge develop,我可以理解您最初遇到问题的情况。 - antak
是的,这就是问题所在 - 我的错,我没有提到涉及的分支是我的主分支。如果我再遇到这个问题,我会尝试你的解决方案。 - brazorf

1
如果另一个分支上的文件与磁盘上未跟踪的文件相同,则可以使用git checkout -f,然后使用git rm --cached。如果不是这样,并且您想在不让git知道的情况下保存未跟踪的文件,则必须执行以下操作:将其放入~/tmp或其他位置,清理git的视图,然后将其mv回存储库目录中。此外,立即将其放入.gitignore中,以避免错误地跟踪它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接