Git 跟踪、忽略、删除和取消跟踪

21

我好像在跟踪一个文件后,又将其忽略,然后删除了它,导致我的git库出了问题。问题是,我想让该文件存在于远程存储库(即现场网站)中,但只是不想将其跟踪。

现在我的主分支试图从存储库中删除所有文件,我知道这将在推送更改时在远程分支上删除它们...我只想取消跟踪它们,但由于它们已经在主分支上被删除,因此无法这样做,而且"git rm -r --cached"会返回"did not match any files"的错误信息。

如何在不从远程存储库中删除这些文件的情况下取消跟踪它们?

3个回答

32

您只是不想跟踪一个文件,但想要将文件保留在远程仓库(非裸仓库)中。

使用以下git命令。执行此操作后,git将停止检查该文件是否有可能被修改。

git update-index --assume-unchanged  <filename>

您可以通过设置--no-assume-unchaged标记来重新跟踪任何时刻的更改。

git update-index --no-assume-unchanged  <filename>

这些命令不会影响远程代码库。

欲了解更多信息,请参考:http://kar-git.blogspot.in/2012/11/how-to-set-git-to-ignore-few-files-like.html


1
嘿,它正在工作。您能否解释一下与添加到git ignore有何不同? - Ajith M A
1
@ Ajith:GIT 不会忽略已经被跟踪的文件。请查看答案中提供的链接获取详细信息。 - Karthik Bose

4

git rm用于从仓库中删除文件。

要停止跟踪它们,您可以在删除后将它们添加到仓库根目录下的.gitignore文件中。


3
我认为你无法通过将文件加入.gitignore来停止跟踪已经被Git追踪的文件。有人可以确认吗? - Joe Phillips
已确认。!字符限制! - heinrich5991
1
是的。使用 rm 命令删除文件不会停止跟踪它们,而使用 git rm 命令则会停止跟踪。 - heinrich5991

0
即使您使用 git rm 取消追踪了文件,仍然可以检出该文件的先前版本,例如:
在本地仓库中: git rm foo git commit -m 'removed foo' git push origin master 在远程仓库中:
git pull origin master // foo will be removed
git checkout abcd1234 -- foo // checkout foo from commit abcd1234 (foo is staged)
git reset HEAD // unstage foo
git status

# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       foo

然后将其添加到.gitignore以取消跟踪


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