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