强制Git更新.gitignore文件

135

我有一个.gitignore文件,它忽略一些文件。我已经更新了.gitignore文件(删除了一些文件名并添加了一些文件名),但是在git status中没有反映。我该如何强制Git更新这些更改,以便追踪之前未追踪的文件,反之亦然。

我尝试过这个问题,但我所有的文件仍然没有被追踪(根据我的更新的.gitignore)。 (简单来说,当.gitignore文件被更新或删除后,我该如何强制Git重新追踪文件。)


2
Git忽略文件对已经被跟踪的文件不起作用。在这种情况下,您需要先使用git rm命令删除文件,然后再将其添加到.gitignore中。 - Tim Biegeleisen
7
可能是忽略已经提交到Git仓库中的文件的重复问题。 - intboolstring
5个回答

276

首先,您需要先清除现有的git cache

清除所有文件的缓存

  • git rm -r --cached .

清除特定文件的缓存

  • git rm -r --cached <file_name.ext>

一旦您清除了现有的缓存,就可以将当前目录中的文件添加/暂存并提交更改了。

  • git add . // 添加所有文件
  • git add <file_name.ext> // 添加特定文件
  • git commit -m "适当的描述信息"

正如Scott Biggs在评论中指出的那样:"这适用于同时添加曾经被忽略过的文件和忽略曾经被跟踪过的文件。"


3
我已明确提到(并附上链接)它没有解决我的问题。 - user4576114
1
git status 是否会追踪 .gitignore 文件? - Shravan40
2
要停止跟踪当前正在跟踪的文件,请使用 git rm --cached - joker
@Shravan 在本地电脑上删除了.gitignore文件后,没有任何变化。 - user4576114
4
请注意,这适用于添加曾经被忽略的文件以及忽略曾经被跟踪的文件。 - SMBiggs
显示剩余2条评论

17

它有效

//首先提交任何未完成的代码更改,然后运行此命令:

git rm -r --cached .

//这将从索引(暂存区)中删除任何已更改的文件,然后只需运行:

git add .

//提交

git commit -m "Atualizando .gitignore para..."

2
这是已经在接受的答案中了。 - eric
确实。这里没有什么新鲜事。 - undefined

13

如果你想将所有文件都加入版本控制,需要从.gitignore文件中删除所有的文件名,而不是删除.gitignore文件本身,并将其commit。然后尝试以下命令:

git config --global core.excludesfile ~/.gitignore_global

有些文件可能会被Git忽略,这取决于操作系统(例如Windows中的.dll文件)。请参阅此处了解更多信息。

现在

git add .

git status

git commit -m "your message"

或者

你可以尝试一个简单的技巧,它可能奏效也可能不奏效。从.gitignore文件中删除所有的文件名,并添加此行 !*.*,然后执行addcommit命令。

更新

很简单,我将通过一个示例来解释。假设您有一个 build 文件夹已经被 Git 添加并跟踪。现在您决定不再跟踪此文件夹。

  1. 将此文件夹 (build) 添加到 .gitignore
  2. 删除 build 文件夹
  3. 提交您的更改

从现在开始,Git 将不再跟踪 build 文件夹。


14
这句话的意思是:“从.gitignore文件中删除所有的文件名,不要删除.gitignore文件本身,然后提交更改。” - m93a
1
请仅返回翻译后的文本:如果您对此答案感到困惑,请参见@Shravan40的答案:https://dev59.com/PVoT5IYBdhLWcg3wjwB-#38451183 - eric
1
@m93a,请参考更新部分,按照步骤进行。 - Saahithyan Vigneswaran

6
您可以通过删除出现问题的特定文件的缓存来解决此问题。您提到的问题发生在您曾经提交过某些特定文件,然后将它们添加到 .gitignore 中。
git rm -r --cached <your_file.extension>
git commit -am "Suitable Message"

@sharvan40之前提出了同样的解决方案,但您不需要删除所有文件的缓存。它会为所有文件创建一个新的提交。

0

假设您当前的工作目录为空。

您可以使用git ls-files检查git当前正在跟踪哪些文件。如果您有很多文件,可以使用git ls-files | grep hello.txt查找git是否正在跟踪该特定文件。

如果它正在跟踪它,则使用git rm hello.txt取消跟踪它(如Tim在他的评论中提到的)。也许先提交该未跟踪状态,然后在下一次提交时将其添加到您的.gitignore中。我曾经看到过一些奇怪的行为,当尝试在同一次提交中忽略和删除时。


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