强制 git 更新。git忽略

Force git to update .gitignore

我有一个 .gitignore 文件,它忽略了一些文件。我更新了 .gitignore 文件(删除了一些文件名并添加了一些文件名)。 git status 中没有体现这一点。我如何强制 git 更新这些更改,以便跟踪之前未跟踪的文件,反之亦然。

我已经试过了 question,我的所有文件仍然没有被跟踪(根据我更新的 .gitignore)。 (简单来说,一旦 .gitignore 被更新或删除,我如何强制 git 收回文件)。

您必须先清除现有的 git cache

删除所有文件的缓存

  • git rm -r --cached .

删除特定文件的缓存

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

清除现有缓存后,add/stage file/files 在当前目录中提交

  • git add . // 添加所有文件
  • git add <file_name.ext> // 添加特定文件
  • git commit -m "Suitable Message"

正如 Scott Biggs 在评论中指出的那样 "This works for both adding a file that was once ignored as well as ignoring a file that was once tracked"

这里假设你当前的工作目录是空的。

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

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

如果要添加所有文件,请从 .gitignore 文件中删除所有文件名,而不是 .gitignore 文件和 commit 它,然后尝试

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

某些文件被 git 忽略,具体取决于 OS(例如 windows 中的 .dll)。更多 information

现在

git add .

git status

git commit -m "your message"

您可以尝试一个简单的 hack,它可能有效也可能无效。从 .gitignore 文件中删除所有文件名并添加此行 !*.*,然后添加 addcommit.

更新

很简单,我举个例子来说明。假设您有一个 build 文件夹,该文件夹已被 git 添加和跟踪。现在您决定不跟踪此文件夹。

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

从现在开始 git 将不会跟踪 build 文件夹。

您可以通过删除出现此问题的特定文件的缓存来解决此问题。 当您提交了一些特定文件,然后稍后将它们添加到 .gitignore 中时,就会出现您提到的问题。

git rm -r --cached <your_file.extension>
git commit -am "Suitable Message"

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

有效

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

git rm -r --cached .

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

git add .

//提交

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