【问题标题】:How do I find all commits with a certain message and squash them into the previous commit?如何找到带有特定消息的所有提交并将它们压缩到上一个提交中?
【发布时间】:2019-08-07 19:19:05
【问题描述】:

当我一直在编码时,我经常使用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
| 

【问题讨论】:

    标签: git version-control git-squash git-amend


    【解决方案1】:

    您可以使用sed 或awk 来操作“rebase 脚本文件”。我们基本上重复使用这个答案:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 2011-07-15
      相关资源
      最近更新 更多