Git从分支中删除文件,将其保留在主服务器中

时间:2016-05-24 19:26:16

标签: git

我创建了一个新分支

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的原因是文件已经提交。

3 个答案:

答案 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 mastermaster时文件恢复的原因是因为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上提交更改。