loo*_*oop 13 git whitespace removing-whitespace
我知道删除尾随空格可以使用预提交钩子完成.我有兴趣手动完成它.我在这里阅读了这个问题:
让Git在提交之前自动删除尾随空格 - Stack Overflow
最接近我想要的答案是来自ntc2的"自动版本":
(export VISUAL=: && git -c apply.whitespace=fix add -ue .) && git checkout . && git reset
Run Code Online (Sandbox Code Playgroud)
该命令运行良好,除了它似乎只是对已存在于repo中的文件的更改,而不是新文件.我有一堆新文件,这意味着它们还没有在回购中.我想从这些文件中删除空格,所以我尝试添加-A而不是-u,但这并没有什么区别.
Luk*_*ood 32
要手动清除最近3次提交中的空白,可以执行以下操作:
git rebase --whitespace=fix HEAD~3
当我在一个主题分支上工作时,我跟踪上游分支(通常通过这样创建它)
git checkout -b topic -t
这让我可以放弃最后一个参数git rebase.所以一旦我完成并准备合并,我可以快速清理整个主题分支:
git ws #hashase到rebase --whitespace = fix
请注意,与HEAD~3示例不同,如果更改了上游分支,这实际上会对您的更改进行修改!(但这也是我想要的,在我的工作流程中.)
我喜欢Luke的答案,除了手动指定基本提交所需的限制,或使用历史线性化的rebase风格工作流.我提出了一个修改,它不需要额外的参数,也不会改变提交图的拓扑结构.作为shell命令:
git rebase --whitespace=fix --onto $(git merge-base HEAD @{u})
Run Code Online (Sandbox Code Playgroud)
或者作为〜/ .gitconfig别名:
ws = "!git rebase --whitespace=fix --onto $(git merge-base HEAD @{u})"
Run Code Online (Sandbox Code Playgroud)
我更喜欢这个,因为有时我想改变我的更改,但如果我认为可能存在合并冲突,我更愿意合并,这样我的原始更改和冲突解决方案都将记录在历史记录中.这样我可以稍后再猜测冲突解决方案并在必要时重做它.
鉴于我并不总是坚持不懈,我宁愿不将空白修复与重新组合混合; 因此修改了卢克的答案.
另外,我启用默认的预提交挂钩,它在空白错误中中止:
cp .git/hooks/pre-commit.sample .git/hooks/pre-commit
Run Code Online (Sandbox Code Playgroud)
这提供了以下工作流程,我喜欢它,因为它足够手动,我知道发生了什么,但自动化程度不足以阻碍:
git commit --no-verify 无论如何要提交git ws 使用别名来修复关于使用的注意事项--onto:这里没有必要,但我发现更容易推理rebase如何以这种方式工作.在Luke的版本中,HEAD~3是<upstream>在手册页中,而在我的版本中<upstream>保留了它在分支的真实上游的默认值.不管怎么说,你都会得到相同的结果.