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

cczfrluj  于 2023-06-04  发布在  Git
关注(0)|答案(2)|浏览(283)

我正在使用git GUI(与Git bash一起使用)。现在,我知道如果我想忽略git的文件,我必须把它们放在.gitignore文件中。
1)我已经知道Windows中的git不会为你创建一个.gitignore文件,你必须自己创建。Git GUI也不会这样做。是这样吗?
我的特殊情况:
我在管理这个项目的一开始犯了一个错误,我还跟踪了另一个文件(让我们称之为“shouldnottrack.file”)。此文件由构建过程生成,因此原则上不应跟踪。
但我做到了,它被包含在提交中(staged,commited等)。
现在,我想取消跟踪此文件。
我暂时通过执行git checkout -- shouldnottrack.file来完成它,但这只工作一次
1.如何取消跟踪此文件?(GUI、命令、任何方法均可)
1.如果我将这个文件包含在.gitignore文件中,git会自动取消跟踪它吗?

qcbq4gxm

qcbq4gxm1#

您必须将其添加到.gitignore从git存储库中删除它,以便它停止跟踪它。
.gitignore对已跟踪的文件没有影响。
您有两种可能性,这取决于您是否仍然希望将文件保留在工作目录中:

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

然后,提交此文件删除。

htrmnn0y

htrmnn0y2#

不确定你的第一个问题,因为我只使用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来覆盖它。分支上的安全设置可能会拒绝推送。
最后,为了防止这种情况再次发生,将有问题的文件添加到.gitignore文件中,git将阻止任何跟踪的发生。
上面的答案将工作,但我强烈建议这种方法,如果数据是敏感的-即密码,ssh密钥等文件将仍然在历史中。
你可以在这里阅读更多https://help.github.com/articles/removing-files-from-a-repository-s-history/和这里https://help.github.com/articles/remove-sensitive-data/

相关问题