如何在 Git 仓库中忽略之前已提交的文件?
.gitignore 文件不适用于已提交的文件。要忽略意外暂存或提交的文件的更改,应执行以下操作:
步骤 1 - 从暂存区删除这些文件或目录
步骤 2 - 提交仓库中的更改
步骤 3 - 在 .gitignore 文件中添加这些文件或目录的路径
步骤 4 - 提交对仓库的更改
让我们通过一个示例来理解这一点:
在工作目录中创建一个名为“bin”的文件夹。在文件夹中添加一个名为“temp.bin”的文件,并在其中添加一些内容,然后提交更改。
$ mkdir bin //create a directory $ echo hello>bin/temp.bin //create a file temp.bin in the directory $ git add bin/temp.bin //record the change in the staging area $ git commit −m ‘add temp.bin’ //commit the change
提交命令的输出表明该文件已永久添加到仓库中。
[master dd1a3a8] add tremp.bin 1 file changed, 1 insertion(+) create mode 100644 bin/temp.bin
在文件“temp.bin”中添加一行。使用 git status 命令检查此更改是否被跟踪。
$ echo hello again > bin/temp.bin $ git status
输出如下所示,表明更改已被跟踪。
Changes not staged for commit: (use “git add <file>...” to update what will be committed) (use “git restore <file>..” to discard changes in working directory) modified : bin/temp.bin No changes added to commit
现在假设在稍后的某个时间点,我们决定应该忽略对“bin”文件夹的更改。将“bin”文件夹添加到 .gitignore 文件将没有任何效果,因为该文件已提交。为了忽略对已提交文件的更改,请执行以下操作:
步骤 1 - 从暂存区删除“bin”文件夹 - 必须记住,已提交的文件不会自动从暂存区删除。因此,让我们首先从暂存区删除该文件。这可以通过使用 git rm --cached -r 命令来实现。此命令的语法为:
git rm −−cached −r <file−name> OR git rm −−cached −r <folder−name>
现在让我们删除“bin”文件夹。
$ git rm −−cached −r bin/
以上命令的输出显示在屏幕截图中:
rm ‘bin/temp.bin’
使用git ls-files验证该文件夹是否已从暂存区删除。
$ git ls−files
输出表明该文件夹已从暂存区删除。
.gitignore
步骤 2 - 提交仓库中的更改
$ git commit m ‘deleted bin folder from tracking’
验证输出以确认更改已提交。
dell@DESKTOP−N961NR5 MINGW64 /e/tut_repo (master) $ git commit −m bin 'deleted bin folder from tracking changes' [master 593aacd] deleted bin folder from tracking changes 1 file changed, 1 deletion (−) delete mode 100644 bin/temp. bin
步骤 3 - 在.gitignore 文件中添加“bin”文件夹。我们假设.gitignore 文件已存在。
$ echo bin/ >>.gitignore
现在将更改添加到暂存区。
$ git add .gitignore
步骤 4 - 提交对仓库的更改
$ git commit −m ‘modified .gitignore to add bin/’
步骤 5 - 要验证 Git 是否正在跟踪“bin”文件夹,让我们对“temp.bin”文件进行更改,然后执行git status命令。
$ hello again from TutorialsPoint >>bin/temp.bin $ git status
输出证明 Git 已完全忽略了在“bin”文件夹中执行的更改。
On branch master Nothing to commit, working tree clean