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

时间:2012-11-18 16:41:57

标签: git ignore

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

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

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

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

提前致谢。

5 个答案:

答案 0 :(得分:56)

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

开始忽略对文件的更改:

git update-index --assume-unchanged path/to/file

再次跟踪:

git update-index --no-assume-unchanged path/to/file

答案 1 :(得分:4)

只是不要添加琐碎的变化。

在提交之前仔细检查您添加的内容是一种好习惯。

使用

,您甚至可以在添加其他文件时忽略文件中的某些更改
git add -p.

如果您使用gitx (R),这会更容易。

答案 2 :(得分:3)

在单独的分支中保留尚未准备好的更改。 git rebase这个分支在必要时在主历史上发生了新的变化。

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

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

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

答案 3 :(得分:1)

使用 git update-index --assume-unchanged 的缺点是(作为 git manual states),您向 git 承诺您不会更改文件。

<块引用>

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

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

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

<块引用>

当读取一个条目时,如果它被标记为跳过工作树,那么 Git 会假装它的工作目录版本是最新的,而是读取索引版本。

这似乎是忽略更改的更可靠方法,而无需担心某些 git 命令可能会丢弃您的更改:

git update-index --skip-worktree path/to/file

再次跟踪文件:

git update-index --no-skip-worktree path/to/file

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

git ls-files -v | grep ^S

答案 4 :(得分:0)

有多种方式[虽然可能不干净整洁,需要你注意]

  1. 将您关注的文件添加到您的仓库中的.gitignore,以便它不会显示提交。当您准备提交文件时,请小心将其从.gitignore中删除
  2. 确保您没有进入&#39;提交其余更改时的文件。您可能希望在git上编写一个包装器,这将确保git commit -agit add .之类的命令在所有问题上运行。另一种方法是使用git guigit citool,您可以在视觉上确保您的文件不会被分阶段使用。区域,因此从未得到承诺
  3. 另一种方法是提交所有可承诺的&#39;更改,然后git stash save您唯一的工作文件。稍后当您准备好更改文件时,您可以git stash pop继续工作并提交。
  4. 希望有所帮助:)