当另一个用户进行pull操作时,git-rm --cached命令会删除他们的工作树文件吗?

20

我希望停止追踪文件,但仍然保留它们在我的工作目录中。

我了解到使用git rm --cached FILE可以做到这一点。但是,如果其他人拉取此更改,他们的本地副本会被删除吗?


结合将它们添加到您的.gitignore中,我希望! - Cascabel
是的。这让我想知道如果将它们添加到gitignore并且不执行git rm会发生什么... - rod
这肯定在其他问题中已经讨论过了;发生的是...什么也没有。 - P Shved
2个回答

8

是的,它们的副本将会被自动删除。想象一下,如果这个删除不会发生——那么所有用户的工作副本都会被无用的删除文件污染。

但是,如果远程用户对这些文件进行了本地更改,它们就不会被删除,因为pull将导致合并冲突。

正如Jefromi在评论中建议的那样,虽然文件在其他用户的端上被删除了,但它们可以很容易地恢复——它们处于版本控制之下,不是吗?;-) 文件可以通过 git checkout <revision> -- <files...> 来获取。作为修订版,您可以指定以前提交的ID,对于pull,它保存在ORIG_HEAD中(有关详细信息,请参见this question):

git checkout ORIG_HEAD -- removed_file

1
如果拉取没有冲突,但他们想要将文件还原,他们只需要执行 git checkout HEAD^ <path> - Cascabel
谢谢,这就是我需要知道的。希望我没有在同事的工作目录中删除任何重要的Xcode文件。 - rod

2
在这种情况下,我更愿意只在本地忽略它们:
如果它们已经被跟踪:
git update-index --skip-worktree FILE

如果他们没有被跟踪:将它们添加到您的本地排除文件中。
echo "FILE" >> .git/info/exclude

如果你想在所有的代码库中忽略某些文件(例如 *~),你可以创建一个全局 .gitignore 文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接