Git:切换分支

时间:2016-05-13 10:28:26

标签: git

我知道这似乎是GIT: How to keep ignored files when switching branches?的副本,但我无法在那里找到答案。

所以我创建了一个带有--orphan标志的新分支,以删除提交历史记录。然后我对所有文件git rm --cached进行了修改,修改了.gitignore以忽略其中一些文件,然后添加并提交。正如所料,被忽略的文件不在新的repo中(也不在其任何历史记录中)。但是,当我切换分支时它们会消失(也就是说,当我检查旧分支时,然后再次检查新分支)。我怎么能避免这种情况?

编辑:整个操作的目的是准备一个项目在GitHub上发布,所以我想隐藏一些包含密码,密钥等私人信息的配置文件。这就是为什么我删除了通过创建新的孤立分支来提交历史记录。我理解,在将文件添加到.gitignore之前提交文件可能会解决消失的问题,但这会使文件最终在公共历史记录中可见。我尝试git add -f,然后git rm --cached,但它没有做到这一点。

1 个答案:

答案 0 :(得分:4)

  

然而,当我切换分支时它们会消失(也就是说,当我检查旧分支时,然后再次检查新分支)。我怎么能避免这种情况?

你做不到。这是设计上的。在publish分支中,您没有跟踪文件,并且您有.gitignore个文件。大!但是,当您切换到 跟踪这些文件的其他分支时,它们将被检出到您的工作目录。这是因为.gitignore仅适用于未跟踪的文件。

来自the documentation

  

gitignore文件指定Git应忽略的故意未跟踪文件。 Git已经跟踪的文件不受影响。

现在,如果您尝试切换回publish分支,则文件将在磁盘上删除,因为它们在该分支中不存在。这些文件的.gitignore会被忽略,因为它们会被跟踪,并且不适用于它们。

(请注意,根据定义,它们会被跟踪,即使它们位于您正在切换的分支中。这主要是一个实现细节,我承认这可能不直观。)

您要做的是在所有分支中删除所有这些文件。使用BFG Repo Cleaner之类的工具在所有分支中从历史完全中删除这些文件。然后你可以安全地.gitignore他们,然后一旦他们完全你就可以安全地将其推送到GitHub。