如何忽略对已提交文件的任何更改 Git
How to ignore any changes on already committed file to Git
我需要忽略对已被 Git 跟踪的特定文件所做的任何更改。这些文件不应从本地或远程存储库中删除。
我试图在 .gitignore 中忽略它们,但它不起作用。
.gitignore:
$MAVEN_PATH_TO_CHILD_MODULE/src/main/java/$PACKAGE/$CLASS.java
知道为什么吗?
取消跟踪您要忽略的文件:
git rm --cached <file>
然后您可以添加文件并且.gitignore
不会跟踪被忽略的文件。
.gitignore 只是告诉 git 要忽略哪些未跟踪的文件,因此如果您的文件已被 git 跟踪,它不会执行任何操作。相反,您可以使用以下命令告诉 git 暂时忽略对跟踪文件的任何更改:
git update-index --assume-unchanged <file>
如果您想撤消此操作,只需 运行:
git update-index --no-assume-unchanged <file>
有关详细信息,请参阅 here。
只能忽略未跟踪的 个文件(未添加到Git)。或者换句话说,忽略是关于 Git 不知道的文件,即不在索引中(暂存区中没有条目)。
要使文件不被跟踪(将其从索引中删除,从而在下一次提交时将其暂存以防止删除),但将其保留在工作区域中,即在文件系统中,您可以使用
$ git rm --cached <file>
在本地提交和推送到远程之后,文件将从远程存储库中删除(从顶级提交的树中 - 它仍将存在于历史记录中)。
如果您想让 Git 忽略更改,以便 git diff
和 git status
不会报告它们,并且 git commit -a
不会提交它们(但是 git add <file>
+ git commit
和 git commit <file>
仍然会添加它们),你可以用这个 trick[=69] lie 到 Git =](参见 git ready » temporarily ignoring files 文章):
$ git update-index --assume-unchanged <file>
git update-index
命令是低级(管道)命令。您可以找到哪些文件“假定未更改”:
$ git ls-files -v
h <file>
git ls-files -v
使用小写字母表示标记为 假设未更改.
的状态文件
您可以使用
将其关闭
$ git update-index --no-assume-unchanged <file>
请注意,此选项最初的目的是在 stat
较慢的平台上加速状态。
在@Dave 评论之后,并引用了 Git - Difference Between 'assume-unchanged' and 'skip-worktree' 问题,另一个足够现代的选项 Git 是 Git 不使用 [= 的工作区版本61=]跳过工作树位。
您可以使用
为跟踪的文件打开它
$ git update-index --skip-worktree <file>
这使得 Git 使用索引版本(最后提交的版本)代替文件系统中的版本。您可以使用
检查哪些文件设置了此位
$ git ls-files -v
S <file>
git ls-files -v
命令将使用 S
表示设置了“skip-worktree”的文件。
请注意,此选项最初的目的是支持稀疏结帐。
我需要忽略对已被 Git 跟踪的特定文件所做的任何更改。这些文件不应从本地或远程存储库中删除。
我试图在 .gitignore 中忽略它们,但它不起作用。
.gitignore:
$MAVEN_PATH_TO_CHILD_MODULE/src/main/java/$PACKAGE/$CLASS.java
知道为什么吗?
取消跟踪您要忽略的文件:
git rm --cached <file>
然后您可以添加文件并且.gitignore
不会跟踪被忽略的文件。
.gitignore 只是告诉 git 要忽略哪些未跟踪的文件,因此如果您的文件已被 git 跟踪,它不会执行任何操作。相反,您可以使用以下命令告诉 git 暂时忽略对跟踪文件的任何更改:
git update-index --assume-unchanged <file>
如果您想撤消此操作,只需 运行:
git update-index --no-assume-unchanged <file>
有关详细信息,请参阅 here。
只能忽略未跟踪的 个文件(未添加到Git)。或者换句话说,忽略是关于 Git 不知道的文件,即不在索引中(暂存区中没有条目)。
要使文件不被跟踪(将其从索引中删除,从而在下一次提交时将其暂存以防止删除),但将其保留在工作区域中,即在文件系统中,您可以使用
$ git rm --cached <file>
在本地提交和推送到远程之后,文件将从远程存储库中删除(从顶级提交的树中 - 它仍将存在于历史记录中)。
如果您想让 Git 忽略更改,以便 git diff
和 git status
不会报告它们,并且 git commit -a
不会提交它们(但是 git add <file>
+ git commit
和 git commit <file>
仍然会添加它们),你可以用这个 trick[=69] lie 到 Git =](参见 git ready » temporarily ignoring files 文章):
$ git update-index --assume-unchanged <file>
git update-index
命令是低级(管道)命令。您可以找到哪些文件“假定未更改”:
$ git ls-files -v
h <file>
git ls-files -v
使用小写字母表示标记为 假设未更改.
您可以使用
将其关闭$ git update-index --no-assume-unchanged <file>
请注意,此选项最初的目的是在 stat
较慢的平台上加速状态。
在@Dave 评论之后,并引用了 Git - Difference Between 'assume-unchanged' and 'skip-worktree' 问题,另一个足够现代的选项 Git 是 Git 不使用 [= 的工作区版本61=]跳过工作树位。
您可以使用
为跟踪的文件打开它$ git update-index --skip-worktree <file>
这使得 Git 使用索引版本(最后提交的版本)代替文件系统中的版本。您可以使用
检查哪些文件设置了此位$ git ls-files -v
S <file>
git ls-files -v
命令将使用 S
表示设置了“skip-worktree”的文件。
请注意,此选项最初的目的是支持稀疏结帐。