假设我有两个分支,master
和b2
。在git存储库所在的特定目录中,有许多文件没有被git跟踪,有些文件被git跟踪。我在分支b2
做了一些工作,现在我尝试使用master
切换回git checkout master
。
我收到错误说:
以下未跟踪的工作树文件将被checkout:queries.py
覆盖
我有两个问题:
我没有收到其他未跟踪文件的此消息,为什么这个特定文件?
我希望这个文件保持其当前跨不同分支的状态(也就是说,我不想覆盖或删除它)。我怎么能这样做?
我查看了提到此错误的其他问题。答案建议使用git clean
说它会删除未跟踪的文件,但我不想删除它。
答案 0 :(得分:5)
您要跟踪文件吗? (它应该由Git控制吗?)
如果否:
git add queries.py; git stash
.gitignore
并提交git stash pop; git reset
如果是:
你可以选择任何一种方式,但你必须自己决定。在某些分支中跟踪文件而在其他分支中忽略是不正常的。无论是到处跟踪还是无处不在。
答案 1 :(得分:3)
该文件已添加到您的某个分支中,而其他分支中则不存在。因此,当您从未跟踪的分支移动到跟踪文件的分支时,您会收到此错误。
当您从跟踪此文件的分支移动时,git在更新代码状态时使文件未跟踪。未在新分支上跟踪的文件将被删除,它们将保留并成为“新”未跟踪文件。然后回过头来,git认为你试图覆盖文件系统中存在的这个文件。
开始跟踪该分支中的文件,您将不会遇到问题。
您还可以添加文件,执行git stash
,更改分支和git stash drop
这样可以使文件看起来像是被跟踪的。存储将阻止任何更改被覆盖并防止更改被跟踪。更改分支时,将以该分支上的状态创建文件。如果文件处于您要保留的状态而不执行此步骤,则删除存储是可选的。
答案 2 :(得分:0)
你的2问:将你的文件添加到.gitignore,以便从git中忽略它们。
答案 3 :(得分:0)
要确保文件保持版本,但无法更改,请将其写入写保护。
它存在于所有分支中,您必须在缺失的地方读取它。
将其添加到.gitignore
使其对git不可见,不会进一步跟踪它。但是所有需要的工作数据都应该存在于存储库中。任何其他方法都是糟糕的风格,迟早会让你。