我在一个变更集中有一堆文件,但我想特别忽略一个修改过的文件。在git状态后看起来如下:

# modified:   main/dontcheckmein.txt
# deleted:    main/plzcheckmein.c
# deleted:    main/plzcheckmein2.c
...

有没有一种方法可以让我添加git,但忽略我不想触摸的一个文本文件?类似于:

git add -u -except main/dontcheckmein.txt

当前回答

现在git支持通过pathspec magic:(exclude)及其缩写:!排除某些路径和文件!。因此,您可以通过以下命令轻松实现。

git add --all -- :!main/dontcheckmein.txt
git add -- . :!main/dontcheckmein.txt

实际上,您可以指定更多:

git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
git add -- . :!path/to/file1 :!path/to/file2 :!path/to/folder1/*

对于Mac和Linux,用引号围绕每个文件/文件夹路径

git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'

其他回答

如果每次有三个有效的解决方案不涉及.gitignore时都要忽略特定的文件。

将要忽略的文件添加到.git/info/exclude。它的工作方式与.gitignore类似,只是配置特定于您的计算机。使用预提交git钩子重置您想要的文件。例如:$echo'git重置--src/main/resources/log4j.财产'>>.git/hooks/pre-commit$chmod+x.git/hooks/预提交预提交钩子就在提交之前运行。因此,您的文件可以在每次提交前自动重置。$git状态在分支机构CHANGE-137-notifications-support。。。未暂存用于提交的更改:修改:Dockerfile修改:src/main/resources/log4j.properties$git添加。$git状态在分支机构CHANGE-137-notifications-support。。。要提交的更改:修改:Dockerfile修改:src/main/resources/log4j.properties$gitcommit-m“微不足道的变化”重置后未分级的更改:M src/main/resources/log4j.属性[CHANGE-137-notifications-support 97cfb3f]微不足道的变化1个文件已更改,3个插入(+)第三种方法是更新特定文件的索引。$git update-index--假定更改了src/main/resources/log4j.properties

要提交的更改:(使用“git reset HEAD…”取消分页)

我经常使用git add-patch,并希望这样做,以避免在同一个文件中始终命中d。为了完成这项工作,我使用了几个非常古怪的git别名:

[alias]
    HELPER-CHANGED-FILTERED = "!f() { git status --porcelain | cut -c4- | ( [[ \"$1\" ]] && egrep -v \"$1\" || cat ); }; f"
    ap                      = "!git add --patch -- $(git HELPER-CHANGED-FILTERED 'min.(js|css)$' || echo 'THIS_FILE_PROBABLY_DOESNT_EXIST' )"

在我的例子中,我只是想一直忽略某些缩小的文件,但对于更一般的用例,可以使用类似$GIT_EXCLUDE_PATTERN的环境变量。

不是直接按照你的要求,因为它不是一个命令就能实现的,但结果应该是你想要的。

通过将所有文件添加到临时区域后

git add -u

键入gitstatus将建议您

git restore --staged main/dontcheckmein.txt

1) 开始忽略对单个已版本化文件的更改

git update-index --assume-unchanged "main/dontcheckmein.txt"

要撤消git更新索引,请假定“main/dontcheckmein.txt”不变

github文档忽略文件

2) 完全忽略特定的单个文件,以防止在存储库中创建该文件

首先,看看这篇stackoverflow文章:Git全局忽略不起作用

在.gitignore中,将相对路径添加到文件中,不以./开头。

因此,如果您的文件位于MyProject/MyFolder/myfile.txt(其中.git也位于MyProject文件夹中),请将MyFolder/myfile.txt添加到.git忽略文件中。

您可以通过git check ignore“MyFolder/myfile.txt”确认哪些规则与忽略相关

关于全局忽略

该链接涉及~/.gitignore_global,但该文件与您的项目相关。因此,如果将排除模式MyFolder/myfile.txt放在~/.gitignore_global中,它会起作用,但不会有太大意义。。。

另一方面,如果您使用git-config-core.excludsfile.gitignore来设置项目,其中.gitignore在MyProject中,则本地文件将覆盖~/.gitignore_global,它可能具有非常有用的规则。。。

因此,目前,我认为最好制作一些脚本,将.gitignore与~/.gitignore_global混合在.gitignor中。

最后一个警告如果要忽略的文件已经在存储库中,则除非执行以下操作,否则此方法将无法工作:git rm“MyFolder/myfile.txt”,但请先备份它,因为它也将在本地删除!你可以稍后复制回来。。。