状态:提出合并请求时,我希望接收者能够了解它做了哪些更改。我发现,他们压扁成一个承诺可能会造成混淆,尤其是如果:如何准备清晰的差异,当`git add --patch`编辑很尴尬?
有编辑代码也被移动 - 差异呈现此批发删除和添加,没有突出的编辑。
代码被添加到一系列相似的部分,例如, case语句,级联ifs,yacc productions - diff通常会将重叠部分重构为重叠部分(例如,不是添加部分,而是使用上一部分的开始,添加新结尾和另一个开始,然后使用前一部分的结束);添加新的codean结尾,并在某些情况下挑出一些小的相似性,然后删除并插入大量相同的代码。 (我认识到diff使用LCS并且速度惊人 - 但有时候它的结果很难理解,即使考虑到diff也不是语法感知的,并且无法识别您所看到的代码段)。
BTW:我用git diff --color-words --ignore-space-change
,这是伟大的,也是错误来重构,可以隐藏的细节 - 而我关注的是,收件人可能使用纯git diff
,看到完全不同的东西(他们可以重建不同) 。
TASK:好的,所以对此的明显解决方案是将合并请求分成不同的提交。有时候,这些可能是我开始使用的实际提交,所以我所需要做的并不是首先放置底座。但我发现即使那样,差异可能不清楚(特别是因为上面的原因(2)),我需要进一步将它们分开。
明显的做法是使用
git add --patch/-p
。但是,修补程序很难适用于重叠更改 - 您可以使用divide and even edit the hunks,但在您想要的更改包括添加,删除和通用代码时,通过反转差异来思考某种思维方式。我实际上做的是直接编辑文件:删除我不想要的部分并提交;然后撤销删除操作(使用我的编辑器)并提交。在实际来源方面的工作比差异化工作更清晰,更直观 - 但感觉就像我在与Git战斗并做错了事(另外,看起来事故倾向于依靠编辑器撤消)。
它发生在我身上,而不是第一个
git stash
该文件,并通过删除我不想要的部分来准备第一次提交;然后git stash apply
“撤销”删除准备第二次提交。但我不确定你可以在rebase
的中间做到这一点(还没有尝试过)。
问题:它带我小时所有做这个...我想我会改善与实践,但... 我在正确的轨道上?有没有更好的办法?你能否首先防止误重构差异?我为了清晰而努力工作吗? (公平地说,这是对前一段时间细微而复杂的代码的许多编辑 - 花费这些时间显示出更深刻的见解。)