繁体   English   中英

如何取消跟踪文件(git 和 git GUI)

[英]How to untrack files (git and git GUI)

我正在使用 git GUI(与 Git bash 一起使用)。 现在,我知道如果我想忽略 git 的文件,我必须将它们放在 .gitignore 文件中。

1)我已经知道 Windows 中的 git 不会为您创建 .gitignore 文件,您必须自己创建它。 git GUI 也不会这样做。 这样对吗?

现在我的特殊情况:

我在开始管理这个项目时犯了一个错误,连同我的 .c 和 .h 文件,我还跟踪了另一个文件(我们称之为“shouldnottrack.file”)。 这个文件是由构建过程生成的,所以原则上不应该被跟踪。

但我做到了,它被包含在提交中(上演、提交等)。

现在,我想取消跟踪这个文件。

我已经通过git checkout -- shouldnottrack.file临时完成了git checkout -- shouldnottrack.file但这只能工作一次

2) 我怎样才能取消跟踪这个文件? (GUI,命令,任何方法都可以)

3) 如果我将这个文件包含在 .gitignore 文件中,git 会自动取消跟踪吗?

谢谢

您必须将它添加到.gitignore并将其从 git 存储库中删除,以便它停止跟踪它。

如果您仍然想将文件保留在工作目录中,您有两种可能性:

  • 如果要删除工作目录中的文件,请执行git rm
  • 如果您想保留它们但只是停止跟踪它们,请执行git rm --cached

然后,提交此文件删除。

不确定您的第一个问题,因为我专门使用 Git CLI 但是对于您的第二个问题,请尝试以下操作:

git filter-branch --force --index-filter \\ 'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE' \\ --prune-empty --tag-name-filter cat -- --all

将 PATH-TO-YOUR-FILE 替换为要从历史记录中删除的实际文件名。 您应该看到以下内容:

Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266) Ref refs/heads/master was rewritten

如果成功 - 在此之后,如果您已经推送到远程,则需要执行git push --force来覆盖它。 分支上的安全设置可能会拒绝推送。

最后,对于您的最后一个问题,以防止再次发生这种情况,将有问题的文件添加到您的忽略文件中,git 将防止发生任何跟踪。

上面的答案会起作用,但是如果数据是敏感的,我强烈建议使用这种方法 - 即密码、ssh 密钥等,因为文件仍然存在于历史中。

你可以在这里阅读更多https://help.github.com/articles/removing-files-from-a-repository-s-history/和这里https://help.github.com/articles/remove-sensitive-data / .

希望这可以帮助!

迪伦

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM