Git rm——缓存和签出
我发布了以下命令Git rm——缓存和签出,git,Git,我发布了以下命令 git rm --cached .idea 在我的develope分支上,因为我不想跟踪ide配置文件。文件已经从索引中删除,但它们仍然在文件系统中,这正是我最初的目标 现在,当我尝试签出另一个分支时,git失败了,因为它们仍然在另一个分支的索引中——这是意料之中的 但是,我需要从任何分支的索引中删除这些文件,因此如何才能对无法签出到的分支发出相同的git rm--cached命令?面对同样的情况,我倾向于这样做,直到所有branch\u文件所在的分支都消失 git reba
git rm --cached .idea
在我的develope
分支上,因为我不想跟踪ide配置文件。文件已经从索引中删除,但它们仍然在文件系统中,这正是我最初的目标
现在,当我尝试签出另一个分支时,git失败了,因为它们仍然在另一个分支的索引中——这是意料之中的
但是,我需要从任何分支的索引中删除这些文件,因此如何才能对无法签出到的分支发出相同的
git rm--cached
命令?面对同样的情况,我倾向于这样做,直到所有branch\u文件所在的分支都消失
git rebase BRANCH_WHERE_FILE_IS_REMOVED BRANCH_WHERE_FILE_REMAINS
注意:这不会导致签出仍保留.idea
的提交,因为rebase的cherry picking是基于已删除文件的提交之后进行的
但是,请注意,如果在任何时候执行git-rebase--abort
,rebase都会尝试返回到索引中仍有.idea
的提交,您可能会遇到麻烦。(建议在尝试之前备份.idea
。)
BRANCH\u其中删除了\u FILE\u
如果没有这样的分支,那么它只能是提交id。如果另一个分支上的文件与磁盘上未跟踪的文件相同,则可以git checkout-f
,然后git rm--cached
。如果没有,并且您想在git不知情的情况下保存未跟踪的文件,那么您必须准确地执行以下操作:将其放在~/tmp
或其他位置,清理git的视图,然后mv
将其返回到存储库目录。另外,请立即将其放入.gitignore
,以避免错误地跟踪它。不起作用。我正在开发(带有.idea文件的分支)并发布git rebase master(master是没有文件的分支),但我得到“错误:以下未跟踪的工作树文件将被签出覆盖:”你确定不是“我正在开发(没有.idea文件的分支)并发布git rebase master(master是包含文件的分支)?因为这更符合您原来的问题,以及您收到的错误消息。无论如何,您需要发出的命令是向后的。它是git-rebase-develop-master
。但是这是develop
上的master
,我很确定您不想要这个。上面的答案实际上假设“现在当我尝试签出另一个分支时”,你指的是其他功能分支,而不是主线。事实上,如果你想签出主线以发布git merge develope
,我知道你会遇到最初的问题。是的,这就是问题所在-我的错,我没有提到涉及的分支是我的主分支。如果我再次遇到这个问题,我会尝试你的解决方案