我如何找到带有特定消息的所有提交并将它们压缩到上一个提交中?

How do I find all commits with a certain message and squash them into the previous commit?

当我编码时,我经常使用 git commit -am <message> 来保存我的工作,如果我在上一次提交中犯了错误,偶尔我会使用 git commit --amend。最近我觉得我很聪明,开始把它们结合起来做 git commit -am --amend。今天我查看了我的 git 日志,我收到了带有消息 --amend 的随机小提交。我现在明白我的错误了:--amend 被解释为消息。

幸运的是,它看起来不像是多个堆叠在一起的,所以我需要做的就是 for each commit with '--amend', squash into previous commit

我有办法做到这一点吗?

以我的 git 日志为例:

* commit f9d69146e47823d6cdc5e0856257b5f63518268d
| Author: Batman <brucewayne@gmail.com>
| Date:   Mon Aug 5 19:18:21 2019 -0400
| 
|     --amend
| 
* commit b07d42e8802dddc144a795471f789b7eb1475ccb
| Author: Batman <brucewayne@gmail.com>
| Date:   Mon Aug 5 19:07:47 2019 -0400
| 
|     Some key feature that allows user to use product
| 

您可以使用 sedawk 来操纵 "rebase script file"。我们基本上重用了这个答案:

How do I run git rebase --interactive in non-interactive manner?

操作脚本应该看起来像这样(注意!未经测试):

#!/usr/bin
sed -i  's/pick \(.*\) --amend/squash  --amend/g'