我创建了一个新分支
git checkout -b mybranch
然后我从中删除了一个文件
git rm --cached myfile.txt
但我想把它留在主人那里;为什么当我结账给主人
git checkout master
我收到“错误:以下未跟踪的工作树文件将被checkout:file.txt覆盖”并且如果我强制结帐
git checkout master -f
该文件是否已从文件系统中删除?
我确定我错过了一些东西,但我只是想从分支中删除文件,而不是从master中删除文件,而git想要在我签出master时合并分支。
我使用git rm
而不是gitignore
的原因是文件已经提交。
答案 0 :(得分:5)
如果你想在master上跟踪myfile.txt但是从mybranch中删除了,那么你只需要删除它并提交删除。
git checkout -b mybranch
rm myfile.txt
git commit -am "delete myfile.txt"
现在当你结帐主人时,你会看到你的文件被退回,当你结账mybranch时它会再次消失。
警告:如果将mybranch合并为master,那么它也将在master上删除。
答案 1 :(得分:2)
git会将文件视为未跟踪,因为它尚未提交。您必须在切换分支之前提交更改。
所以你创建了一个分支并对该分支进行了更改。当你试图切换回master
时,git会禁止这样做,因为还有一些尚未提交的更改(或明确忽略;(实际上是untracked
的含义)
强制结帐(git checkout -f master
)master
时文件恢复的原因是因为master
中的文件
如果您想这样做,您必须执行以下操作
创建并签出分支
git checkout -b somebranch
从somebranch
删除文件(--cached
实际上会从索引中删除该文件,但会将文件保留在文件系统中。请参阅git-rm reference docs)
git rm --cached somefile
提交更改
git commit -m "Remove somefile"
这将从git中删除文件,但不会从磁盘中删除,所以现在要git你有一个未跟踪的更改(某些文件在磁盘上但不在git中)
如果您希望其他贡献者能够结帐分支,请将其链接到远程
git push --set-upstream origin somebranch
现在该文件已从origin/somebranch
而不是master
当您向.gitignore
添加文件时,如果已经提交,则不会将其从存储库中删除。对文件的更改(请注意)将被忽略(因此也会将其删除)。如果您这样做,您仍然必须删除该文件并提交。之后,git在重新创建时(或文件上的任何其他操作)将不再跟踪文件。
答案 2 :(得分:0)
在交换回master之前,在mybranch上提交更改。