一位同事创建了一个提交,他的编辑器在每一行(以及其他更改)后附加了分号。
我知道我可以使用-w开关来忽略空白错误。是否有某种git魔法可以让 git;完全忽略,或者只有在 EOL 时更好?
就像是:
git diff --ignore=; -w
Run Code Online (Sandbox Code Playgroud)
也许你可以用这个--word-diff-regex选项来解决这个问题。这就是我所做的:我创建了一个简单的文件并使用以下内容提交它。
first line
second line
third line
Run Code Online (Sandbox Code Playgroud)
然后我这样修改:
first line;
second; line;
third changed line;
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,您只需要显示以下差异:第二个 -> 第二个;第三行 -> 第三行更改
您可以部分执行此操作:
git diff --word-diff-regex='[^ \\n;]+' HEAD..HEAD~1
Run Code Online (Sandbox Code Playgroud)
这是输出:
first line
second line
third[-changed-] line
Run Code Online (Sandbox Code Playgroud)
我说部分是因为即使我找到了一个正则表达式来检测第一个更改('[^ \\n]+(?!\\n|$)'),git 似乎不接受它,出于某种我不知道的原因(我仍在研究它)。
不管怎样,其背后的逻辑是这个选项“覆盖”了 git 考虑单词的方式。我知道这不是正确的正则表达式,因为它没有涵盖几种情况,请根据您的需要更改它(例如,如果您考虑test1;test2一个单词)。
我能想到的最简单的方法是:
使用您同事的版本创建一个文件,在其中删除 EOL 处的分号,并将其与您想要的文件进行比较:
git show modifiedcommit:the/file | sed -e 's/;$//' > /tmp/theFile
git diff originalcommit:the/file /tmp/theFile
Run Code Online (Sandbox Code Playgroud)