首页 公告 项目 RSS

git合并多个commit为一个commit

May 16, 2023 本文有 1574 个字 需要花费 4 分钟阅读

简介

有时候测试ci会触发多个commit来执行action,但是这些commit都是毫无意义的,所以是需要合并一下的

操作

首先使用

git log

查看你的commit

之后找到你最早的commit记录,记住是最早,也就是最最最开始的那一条,不是最晚的,然后执行

git rebase -i b6c3b0b590c3a85ff56ad9b062bb4949048532ea

执行完成之后会进入你终端的默认编辑器,一般是vim,然后会有一系列的操作说明

pick 588402c 1. add github action ci 2. 添加docker-compose 3. 优化dockerfile 4. 添加配置文件
pick 68427e1 添加config
pick 68427e1 添加config
pick 68427e1 添加config
pick 68427e1 添加config
pick 68427e1 添加config

# 变基 c91140a..68427e1 到 c91140a(2 个提交)
#
# 命令:
# p, pick <提交> = 使用提交
# r, reword <提交> = 使用提交,但编辑提交说明
# e, edit <提交> = 使用提交,但停止以便修补提交
# s, squash <提交> = 使用提交,但挤压到前一个提交
# f, fixup [-C | -c] <提交> = 类似于 "squash",但只保留前一个提交
#                    的提交说明,除非使用了 -C 参数,此情况下则只
#                    保留本提交说明。使用 -c 和 -C 类似,但会打开
#                    编辑器修改提交说明
# x, exec <命令> = 使用 shell 运行命令(此行剩余部分)
# b, break = 在此处停止(使用 'git rebase --continue' 继续变基)
# d, drop <提交> = 删除提交
# l, label <label> = 为当前 HEAD 打上标记
# t, reset <label> = 重置 HEAD 到该标记
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       创建一个合并提交,并使用原始的合并提交说明(如果没有指定
# .       原始提交,使用注释部分的 oneline 作为提交说明)。使用
# .       -c <提交> 可以编辑提交说明。
# u, update-ref <引用> = 为引用 <ref> 设置一个占位符,以将该引用更新为此处的新提交。
#                       此 <引用> 在变基结束后更新。
#
# 可以对这些行重新排序,将从上至下执行。
#
# 如果您在这里删除一行,对应的提交将会丢失。
#
# 然而,如果您删除全部内容,变基操作将会终止。
#

这个时候你要把除第一行之外的所有commit都改为squash,比如

pick 588402c 1. add github action ci 2. 添加docker-compose 3. 优化dockerfile 4. 添加配置文件
squash 68427e1 添加config
squash 68427e1 添加config
squash 68427e1 添加config
squash 68427e1 添加config
squash 68427e1 添加config

# 变基 c91140a..68427e1 到 c91140a(2 个提交)
#
# 命令:
# p, pick <提交> = 使用提交
# r, reword <提交> = 使用提交,但编辑提交说明
# e, edit <提交> = 使用提交,但停止以便修补提交
# s, squash <提交> = 使用提交,但挤压到前一个提交
# f, fixup [-C | -c] <提交> = 类似于 "squash",但只保留前一个提交
#                    的提交说明,除非使用了 -C 参数,此情况下则只
#                    保留本提交说明。使用 -c 和 -C 类似,但会打开
#                    编辑器修改提交说明
# x, exec <命令> = 使用 shell 运行命令(此行剩余部分)
# b, break = 在此处停止(使用 'git rebase --continue' 继续变基)
# d, drop <提交> = 删除提交
# l, label <label> = 为当前 HEAD 打上标记
# t, reset <label> = 重置 HEAD 到该标记
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       创建一个合并提交,并使用原始的合并提交说明(如果没有指定
# .       原始提交,使用注释部分的 oneline 作为提交说明)。使用
# .       -c <提交> 可以编辑提交说明。
# u, update-ref <引用> = 为引用 <ref> 设置一个占位符,以将该引用更新为此处的新提交。
#                       此 <引用> 在变基结束后更新。
#
# 可以对这些行重新排序,将从上至下执行。
#
# 如果您在这里删除一行,对应的提交将会丢失。
#
# 然而,如果您删除全部内容,变基操作将会终止。
#

如果嫌弃麻烦的话可以使用vim的批量替换功能

%s/pick/squash/g

之后保存,保存完成之后就可以查看 git log

之后如果你觉得你的commit 记录不是很好看,你可以使用下面的命令去修改

git commit --amend

使用下面命令修改提交的作者信息

git commit --amend --author="username <[email protected]>"

欢迎关注我的博客www.bboy.app

Have Fun