樱桃选择忽略空格/行结尾

时间:2014-07-16 13:48:45

标签: linux git line-endings

有没有办法告诉git cherry-pick使用renormalize合并策略?我不确定-X选项是否有效。

我有一堆提交似乎假设一种类型的行结束,并且我试图将它们应用于假设另一行的分支。没有好时光......

2 个答案:

答案 0 :(得分:33)

因此,为了完整起见,答案是ignore-all-space合并策略完成工作:

git cherry-pick -X ignore-all-space <commit-id>

这将让你轻松地挑选文件时提交的提交,例如,windows行结尾到具有unix文件结尾的版本。

答案 1 :(得分:3)

我知道这个问题已经很久了,但是添加了这个答案,因为这是谷歌搜索“ git cherry-pickignore空白”的第一篇文章。

即使-X ignore-all-space可以正常工作,但是如果不忽略空格的小巧选择有一些冲突,您也必须手动检查提交。 (或在选择樱桃时使用--no-commit,并在git diff --staged进行查看时使用

在某些情况下,-X ignore-all-space选项看起来不错,但某些缩进是错误的。

例如,假设您在不使用忽略所有空间的情况下与前导空格存在一些合并冲突,例如:

    Change from theirs, Indent level 1(no conflict with/out whitespace)
<<<<< HEAD
Indent level 0
=====
    Indent level 1 without any code change
>>>>> cherry-picked commit

在这种情况下,-X ignore-all-space没有冲突,但是实际的提交看起来像这样:

    Change from theirs, indent level 1
Indent level 0

这里发生的事情是他们改变了逻辑,因此以前的代码(缩进级别0)应该缩进到级别1,但这不是因为您指定了ignore- all -space选项。

所以tl; dr是:

  1. -X ignore-all-space选项还忽略了前导空格,这在某些情况下和Python之类的语言中可能会很麻烦。
  2. 因此,使用该选项后,您必须手动进行查看,或者...
  3. 改为使用-X ignore-space-at-eol,并手动处理主要的空白冲突。

但是请不要停止阅读,因为这些选项不是导致此问题的主要原因-此问题的核心不是每个人都遵循相同的空格规则。

对于前导和尾随空格:使用整理工具或IDE,或遵循相同规则的任何东西。这不是特定于操作系统的,如果您的团队为使其他开发人员的生活更轻松而付出了一定的努力,则可以遵循。

对于eol更改:这是特定于OS的,但是git幸运地支持core.autocrlf和core.eol用于多平台开发环境。有关更多详细信息,请参见git-scm