首页 > 解决方案 > Git rebase:通过运行命令修复

问题描述

我在一个分支上,在我的分支之前有许多提交(在一条直线上)develop,并且在每个提交消息中都是我正在处理的问题跟踪票的名称。现在我想通过每次提交重新设置基础并将该票证的名称更改为不同的票证,概念上类似于:

perl -pi -e 's/BB-123/BB-456/' .git/COMMIT_EDITMSG

有没有办法告诉 rebase 的reword操作,而不是打开交互式编辑器,而是要在消息文本上运行命令?

我想出的最好的办法是exec在每次提交运行git commit --amend并将$EDITOR变量更改为上述命令或其他内容之后执行一个操作,但这非常可怕。

如果没有一个好的自动解决方案,我通常会reword在每次提交时执行一个操作并手动编辑所有消息。

标签: gitrebasegit-amend

解决方案


是:当交互式变基打开编辑器时,它会根据不同的环境设置打开一个:

  • GIT_SEQUENCE_EDITOR用于运行命令,但是
  • GIT_EDITOR用于改写操作。

(如果其中一个没有设置,Git 会像往常一样回退到sequence.editorcore.editor内置编辑器。您可以暂时更改这些设置,但环境变量更容易。)

因此,您可以使用:

GIT_SEQUENCE_EDITOR=script1 GIT_EDITOR=script2 git rebase -i <arguments>

wherescript1替换editreword, 并且script2s/BB-123/BB-456/你想要的,例如。


推荐阅读