防止在Git中覆盖未跟踪的文件

时间:2013-08-21 20:09:49

标签: git

假设我有两个分支,masterb2。在git存储库所在的特定目录中,有许多文件没有被git跟踪,有些文件被git跟踪。我在分支b2做了一些工作,现在我尝试使用master切换回git checkout master

我收到错误说:

  

以下未跟踪的工作树文件将被checkout:queries.py

覆盖

我有两个问题:

  1. 我没有收到其他未跟踪文件的此消息,为什么这个特定文件?

  2. 我希望这个文件保持其当前跨不同分支的状态(也就是说,我不想覆盖或删除它)。我怎么能这样做?

  3. 我查看了提到此错误的其他问题。答案建议使用git clean说它会删除未跟踪的文件,但我不想删除它。

4 个答案:

答案 0 :(得分:5)

您要跟踪文件吗? (它应该由Git控制吗?)

如果否:

  1. 存档文件:git add queries.py; git stash
  2. 查看其他分支
  3. 从分支中删除文件,将其添加到.gitignore并提交
  4. 从藏匿处恢复文件:git stash pop; git reset
  5. 如果是:

    1. 将文件添加到Git
    2. 查看其他分支
    3. 在某些时候你可能会合并这两个分支,然后你必须决定在提交合并时要保留哪个版本的文件。
    4. 你可以选择任何一种方式,但你必须自己决定。在某些分支中跟踪文件而在其他分支中忽略是不正常的。无论是到处跟踪还是无处不在。

答案 1 :(得分:3)

该文件已添加到您的某个分支中,而其他分支中则不存在。因此,当您从未跟踪的分支移动到跟踪文件的分支时,您会收到此错误。

当您从跟踪此文件的分支移动时,git在更新代码状态时使文件未跟踪。未在新分支上跟踪的文件将被删除,它们将保留并成为“新”未跟踪文件。然后回过头来,git认为你试图覆盖文件系统中存在的这个文件。

开始跟踪该分支中的文件,您将不会遇到问题。

您还可以添加文件,执行git stash,更改分支和git stash drop这样可以使文件看起来像是被跟踪的。存储将阻止任何更改被覆盖并防止更改被跟踪。更改分支时,将以该分支上的状态创建文件。如果文件处于您要保留的状态而不执行此步骤,则删除存储是可选的。

答案 2 :(得分:0)

你的2问:将你的文件添加到.gitignore,以便从git中忽略它们。

答案 3 :(得分:0)

要确保文件保持版本,但无法更改,请将其写入写保护。

它存在于所有分支中,您必须在缺失的地方读取它。

将其添加到.gitignore使其对git不可见,不会进一步跟踪它。但是所有需要的工作数据都应该存在于存储库中。任何其他方法都是糟糕的风格,迟早会让你。