2012-11-18 27 views
27

我正在寻找一种方法来'隐藏'对Git中的几个文件所做的微小更改,以便它们不会在git状态中显示,直到对这些文件做出不同更改文件。Git - 暂时忽略对文件的微小更改

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

是否存在执行此任务的命令?它会有点像假设不变的命令,但不是永久性的。

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

在此先感谢。

+1

你为什么不干脆创建一个“平凡的修复”分支? – Mat

+0

@Mat这样一个分支的收益是什么?我仍然不得不将它合并到主要的琐碎更改中才显示出来。 – Zelgadis

+0

你会保留所有微不足道的变化,并在开发周期中将它们合并。这样他们就不会干涉“正确”的提交,但它们也不会被遗忘。 – Mat

回答

36

在我的使用情况(使用我的个人计算机上的编辑过的配置文件开发,与不变配置另一台机器上运行),这是对我的解决方案:

开始忽略对文件的更改:

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

保持跟踪再次:

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

哈,谢谢你的复制粘贴示例。我经常忘记它们的确切语法,因为它不经常使用它:p –

+0

这是最好的解决方案。最初发布于2009年2月18日,资料来源:http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html –

1

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

  1. 在关注添加文件.gitignore在你的回购协议,这样它不露面提交。当您准备好提交文件时,请小心将其从.gitignore中删除。
  2. 确保在提交其余更改时不会“暂存”文件。你可能想写一个包装,通过git这将确保像git commit -agit add .这样的命令运行除了所述的文件之外的所有文件。另一种方法是使用git guigit citool,您可以在视觉上确保您的文件不在“分段”区域,因此永远不会被提交。
  3. 另一种方法是提交所有“可提交”的更改,然后执行您唯一的工作文件。稍后当您准备更改文件时,您可以git stash pop并继续工作并提交。

希望帮助:)

+1

不幸的是,第一种解决方案不起作用,因为文件已经被跟踪。 2和3的组合是我现在使用的,但我想要更自动的东西。无论如何感谢您的答案! – Zelgadis

+0

不幸的是,'git'还不能读取开发人员的想法来确定一个变化是否重要(并且应该被提交)还是不需要(保留)。最干净的选项是(a)“微小修补”的单独分支,定期重新设置并合并到某些点; (b)在提交消息中将变化标记为“微不足道”。恕我直言(b)是可取的,因为它避免了没有人测试过的歪斜和版本。 – vonbrand

3

保持你的变化是不是在一个单独的分支准备。 git rebase这个分支必要时在主历史的新变化之上。

无论是在进步发展,暂时的东西,连东西,是永远不会被包含在主体工程的历史 - 同样的过程同样适用。

如果/当分支的变化准备好被包括在主历史中时;将其合并。如果不是,请将它们保留在单独的分支中并继续重新绑定。

(边注:git merge --no-ff可能是使用的创建即使快进合并是可能的合并提交 - 这取决于你的项目的规则,这可能是最好)

+0

这就是我发现的最适合我的解决方案。谢谢! – Zelgadis

+0

不客气!我很高兴我能提供帮助。 – jsageryd

1

就是不”加上微不足道的变化。

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

你甚至可以忽略文件中的一些变化,同时添加其他使用

git add -p. 

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