我知道这似乎是GIT: How to keep ignored files when switching branches?的副本,但我无法在那里找到答案。
所以我创建了一个带有--orphan
标志的新分支,以删除提交历史记录。然后我对所有文件git rm --cached
进行了修改,修改了.gitignore
以忽略其中一些文件,然后添加并提交。正如所料,被忽略的文件不在新的repo中(也不在其任何历史记录中)。但是,当我切换分支时它们会消失(也就是说,当我检查旧分支时,然后再次检查新分支)。我怎么能避免这种情况?
.gitignore
之前提交文件可能会解决消失的问题,但这会使文件最终在公共历史记录中可见。我尝试git add -f
,然后git rm --cached
,但它没有做到这一点。
答案 0 :(得分:4)
然而,当我切换分支时它们会消失(也就是说,当我检查旧分支时,然后再次检查新分支)。我怎么能避免这种情况?
你做不到。这是设计上的。在publish
分支中,您没有跟踪文件,并且您有.gitignore
个文件。大!但是,当您切换到 跟踪这些文件的其他分支时,它们将被检出到您的工作目录。这是因为.gitignore
仅适用于未跟踪的文件。
gitignore文件指定Git应忽略的故意未跟踪文件。 Git已经跟踪的文件不受影响。
现在,如果您尝试切换回publish
分支,则文件将在磁盘上删除,因为它们在该分支中不存在。这些文件的.gitignore
会被忽略,因为它们会被跟踪,并且不适用于它们。
(请注意,根据定义,它们会被跟踪,即使它们位于您正在切换的分支中。这主要是一个实现细节,我承认这可能不直观。)
您要做的是在所有分支中删除所有这些文件。使用BFG Repo Cleaner之类的工具在所有分支中从历史完全中删除这些文件。然后你可以安全地.gitignore
他们,然后一旦他们完全你就可以安全地将其推送到GitHub。