我们将php-cs-fixer
引入到我们的代码库中,我希望对现有的特性分支进行重新设置。我们强制执行一个半线性历史,因此在合并之前,每个特征分支都会重新设置基址,而不会挤压整个分支。
为了保持历史记录干净,我希望在分支中的每次提交时都运行该工具,但保持提交到位,并且不会在以后的提交中更改代码样式,但在以后将合并到main
分支中的每个提交中都是正确的。
使用git rebase --exec "./vendor/bin/php-cs-fixer fix" main
会导致很多冲突,我不想手动修复,因为它很容易出错。
1条答案
按热度按时间ilmyapht1#
我想出了这个半自动的方法:
我从
git rebase -i main
开始,并将每个pick
操作替换为edit
。(振动::%s/pick/edit/
)我没有手动解决冲突,而是使用
git checkout REBASE_HEAD .
,将工作树替换为非代码格式的版本,然后再次运行代码格式工具。(在本例中为./vendor/bin/php-cs-fixer fix
)由于如果发生冲突,重新设置行为会略有不同,因此需要根据状态使用不同的命令来完成当前提交:
如果遇到正常的“编辑”断点,请执行此命令:
看起来像是
checkout 和代码格式后,修改当前提交并继续重新基础:
完成一步命令:
如果遇到重基冲突,请执行以下命令:
看起来像这样(提示可能是彩色的):
checkout 并编码格式后,阶段更改并让
git rebase --continue
修改提交:完成一步命令:
如果您使用了错误的命令,最终结果将是相同的,但您将丢失一些提交。
遗憾的是,我无法找到使用
git rebase --exec
的方法(在exec命令中没有定义REBASE_HEAD
?)或自动使用正确的解析命令的方式。我确信有更好的解决方案,但我找不到,所以我在这里介绍我的解决方案。