Git - 暂时忽略对文件的微不足道的更改

Zel*_*dis 45 git ignore

我正在寻找一种方法来"隐藏"对Git中的一些文件所做的微小更改,这样在对这些文件进行不同的更改之前它们不会显示为git状态.

示例:我有一个java文件,其中唯一的更改是删除未使用的导入(贡献者在提交之前忘记运行组织导入).现在我已经删除了那个导入,并且更改(显然)显示在git中.由于我没有对该文件进行其他更改,因此我不喜欢将该文件作为另一个(不相关的)更改的一部分提交或单独提交此更改.当然,我可以恢复更改,只有在我必须对该文件进行更改时才应用它,但我可以"冒险"忘记它.

这样的任务是否存在命令?它有点像假设未改变的命令,但不是永久的方式.

如果没有这样的命令可以解决这个问题的正确方法是什么?

提前致谢.

ben*_*oth 63

在我的用例中(使用我个人计算机上编辑过的配置文件进行开发,在配置未更改的另一台机器上运行),这对我来说是解决方案:

开始忽略对文件的更改:

git update-index --assume-unchanged path/to/file
Run Code Online (Sandbox Code Playgroud)

继续跟踪:

git update-index --no-assume-unchanged path/to/file
Run Code Online (Sandbox Code Playgroud)

  • 哈,谢谢你的复制粘贴示例.由于不经常使用它,我一直忘记这些的确切语法:p (3认同)
  • 当您忘记自己已“-假定未更改”的内容,而错过了对该文件的修改时,这似乎可能会导致付费。真正的好处是,只要文件更新了mtime或类似的东西,如果有类似的东西会自动重置自己。 (3认同)

Hex*_*ugs 22

使用的缺点git update-index --assume-unchanged是(正如git 手册所述),你向 git 承诺你不会更改文件。

当“假设不变”位打开时,用户承诺不更改文件,并允许 Git 假设工作树文件与索引中记录的内容匹配。

如果您违反此承诺并无论如何更改文件,都可能会产生不良后果。例如,在某些实现上,执行 agit stash将丢弃您对文件所做的更改(如果您承诺不会更改它,为什么不应该这样做呢?)。

使用--skip-worktree选项来告诉 git 假装工作版本与索引版本是最新的。

读取条目时,如果它被标记为“skip-worktree”,则 Git 会假装其工作目录版本是最新的,并改为读取索引版本。

这似乎是忽略更改的更可靠方法,而不存在某些 git 命令可能会丢弃更改的风险:

git update-index --skip-worktree path/to/file
Run Code Online (Sandbox Code Playgroud)

要再次跟踪文件:

git update-index --no-skip-worktree path/to/file
Run Code Online (Sandbox Code Playgroud)

要列出您已设置的文件skip-worktree

git ls-files -v | grep ^S
Run Code Online (Sandbox Code Playgroud)


jsa*_*ryd 5

将尚未准备好的更改保存在单独的分支中。git rebase根据需要,该分支位于主要历史记录的新变化之上。

无论是正在进行的开发、临时的事情,甚至是永远不会包含在主要项目历史中的事情——相同的过程都同样有效。

如果/当分支的更改准备好包含在主历史记录中时;合并它。如果没有,请将它们保留在单独的分支中并继续变基。

(旁注:git merge --no-ff即使可以进行快进合并,也可能用于创建合并提交——根据您的项目规则,这可能更可取)


nes*_*983 5

只是不要添加琐碎的更改。

最好在提交之前仔细检查添加的内容。

您甚至可以忽略文件中的某些更改,而使用添加

git add -p.
Run Code Online (Sandbox Code Playgroud)

如果使用gitx(R)则更容易。