首页 > 解决方案 > 如何找到带有特定消息的所有提交并将它们压缩到上一个提交中?

问题描述

当我一直在编码时,我经常用它来保存我的工作,如果我在之前的提交中犯了错误,我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
| 

标签: gitversion-controlgit-squashgit-amend

解决方案


您可以使用sedorawk为此来操作“变基脚本文件”。我们基本上重用了这个答案:

如何以非交互方式运行 git rebase --interactive?

操作脚本应如下所示(注意!未经测试):

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

推荐阅读