我喜欢 Luke 的回答,除了您需要手动指定基本提交或使用 rebase 样式的工作流程(其中您的历史是线性化的)的限制。我提出了一个不需要额外参数且不会更改提交图拓扑的修改。作为 shell 命令:
git rebase --whitespace=fix --onto $(git merge-base HEAD @{u})
或作为 ~/.gitconfig 别名:
ws = "!git rebase --whitespace=fix --onto $(git merge-base HEAD @{u})"
我更喜欢这个,因为有时我想重新调整我的更改,但如果我认为可能存在合并冲突,我更喜欢合并,这样我的原始更改和冲突解决都将记录在历史记录中。这样我就可以事后猜测冲突解决方案,并在必要时重做。
鉴于我并不总是变基,我不喜欢将空白修复与变基混为一谈;因此对卢克的答案进行了修改。
此外,我启用了默认的预提交钩子,该钩子在空白错误时中止:
cp .git/hooks/pre-commit.sample .git/hooks/pre-commit
这给出了以下工作流程,我喜欢它,因为它足够手动,我知道发生了什么,但足够自动化,不会妨碍:
- hack hack hack,引入空格错误
- 尝试提交
- 由于预提交挂钩,提交失败并出现空白错误
git commit --no-verify
无论如何都要承诺
git ws
使用别名修复
注意 : 的用法在--onto
这里没有必要,但我发现更容易理解 rebase 如何以这种方式工作。在 Luke 的版本中,HEAD~3
是<upstream>
在手册页中,而在我的版本中,<upstream>
它保留了分支的实际上游的默认值。不管怎样,你最终都会得到相同的结果。