自动重新编辑所有被合并的提交记录

8
我希望能够在将我的提交推送到远程仓库之前对它们进行修改,但我又想自动化这个过程。
我可以通过执行以下操作来重新编写所有的附加提交:
git rebase -i origin/master

这将打开一个编辑器,我可以将所有提交从pick更改为reword。然后它会打开编辑器,让我修改提交消息。
约束条件摘要:
  • 我不想将每个提交都更改为reword
  • 我不想手动输入每个提交哈希。
有没有一种像这样做rebase的方法?

你是想对每个消息都进行相同的更改吗?也许一个例子会有所帮助。 - Tom Fenech
我想利用重命名功能,而不必交互式地重新设置基础。我将编辑我的问题以使其更清晰。 - Bryce Drew
如果重新编写是自动化的,而不是手动的话,git filter-branch可能就是答案,可以查看这个问题和回答:https://dev59.com/omYq5IYBdhLWcg3woB-7#37941403 - ob-ivan
2个回答

14

由于问题比较模糊,以下是你可以进行的操作提示。

我不想改动每一次提交来重新编辑信息。

你可以通过执行 git config sequence.editor 'sed -i s/pick/reword/' 来更改使用 git-rebase -i 的编辑器,这样在重写基础待办事项时就不会弹出编辑器,而且选择会被替换。但这有点麻烦,因为你需要在之后撤销该配置(还有其他情况下使用的 core.editor$EDITOR)。

你也可以运行 git rebase origin/master -x 'git commit --amend'-x 在重写待办事项时,在每个 pick 后添加了 exec <-x> 行。注意这里不需要 -i。修订操作将允许你更改提交消息,例如: git commit --amend -m "新消息"

我不想手动键入我要重新编辑信息的每一个提交。

你可以使用编辑器变量设置为非交互式命令,以你想要的方式进行编辑,但我不知道你想要做哪种编辑。

我想要将所有新提交的基础更改为选择以外的内容。

请参考前面的答案。


1
这是完美的 git rebase -i origin/master -x 'git commit --amend' - Bryce Drew
1
谢谢,我不知道-c(尽管你编辑了你的评论,但是-c后面多了一个config)。 - λuser
3
不需要做永久配置,可以使用“git -c sequence.editor='sed -i s/pick/reword/' rebase -i”命令。这将完全消除你回答中的笨拙之处。你甚至可以尝试这个别名:git config alias.reword '-c sequence.editor="sed -i s/pick/reword/" rebase -i'。 - Joseph K. Strauss

0

我在这里查看,以便我可以做同样的事情。我有一个功能,写成多个提交,基本上是开发过程中的小型备份。随后,我想将其分成两个较小的功能,并在对每个提交进行排序并为每个功能创建单独的分支之前对每个提交进行标记“Feature A:…”和“Feature B:…”。

阅读完此线程后,我选择了编辑器中的简单查找和替换解决方案。

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接