2

假设我有两个分支,master并且b2. 在git仓库所在的具体目录中,有很多文件是git不跟踪的,也有一些是git跟踪的。我在 branch 做了一些工作b2,现在我尝试切换回masterusing git checkout master

我收到一条错误消息:

以下未跟踪的工作树文件将被结帐覆盖:querys.py

我有两个问题:

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

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

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

4

4 回答 4

5

是否要跟踪文件?(是否应该由 Git 控制版本?)

如果不:

  1. 存放文件:git add queries.py; git stash
  2. 结帐另一个分支
  3. 从分支中删除文件,将其添加到.gitignore并提交
  4. 从存储中恢复文件:git stash pop; git reset

如果是:

  1. 将文件添加到 Git
  2. 结帐另一个分支
  3. 在某些时候,您可能会合并两个分支,然后您必须决定在提交合并时保留哪个版本的文件。

您可以选择任何一种方式,但您必须做出决定。在某些分支中跟踪文件而在其他分支中忽略是不正常的。要么到处跟踪,要么到处忽略。

于 2013-08-21T21:18:49.313 回答
3

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

当您从跟踪该文件的分支移出时,git 在更新代码状态时使该文件不被跟踪。在新分支上未跟踪的文件不会被删除,它们会保留并成为“新的”未跟踪文件。然后向后移动,git 认为您正在尝试覆盖该文件,因为它存在于文件系统中。

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

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

于 2013-08-21T20:23:51.377 回答
0

您的 2 问:将您的文件添加到 .gitignore 以从 git 事物中忽略它们。

于 2013-08-21T20:18:44.127 回答
0

为确保文件保持版本控制,但不能更改,请将其设置为写保护。

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

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

于 2013-08-21T21:04:09.623 回答