git实用技巧:将多次commit合并为一次

使用 git rebase -i 命令就可以将从最后一次提交往前的多次提交合并为一次。

使用举例:
当前我的提交记录如下,一共有3次提交,下面就把这3次提交合并为一次:
待处理状态

输入以下命令:

git rebase -i HEAD~3

之后会弹出现目的编辑窗口:

这是一个vim编辑的文本,需要使用vim命令进行编辑。

  • 首先,输入i命令,进入编辑模式。
  • 我们需要关注的是最上面几行以pick开头的信息。需要把除了第一行外的pick改成s。
  • 然后按esc键退出输入模式,输入:(英文冒号)进入底线命令模式
  • 再输入wq 即保存后退出

pick or s

之后会展示如下界面,进行提交注释处理。

我们把除了一个条之外的注释都删除掉,删除后的效果如下:

最后的注释
之后同样地保存退出即可。

这样就结束了,再用git log 查看下提交记录,发现已经变为一条记录了。要注意这条记录是三次中最早的那一次,它显示的提交时间和第一次的时间一致。但是它却也是一条新的提交记录,可以注意到它的提交记录号已经和之前的三次都不一样了。

注意,如果当前分支之前已经推送到远程了,需要使用git push -f 才能将rebase后的分支推送到远程。使用git push -f之前需要注意,如果当前分支是多人共同开发的,需要注意别把别人的推送覆盖了。

命令解释

这篇文章写完很久了。但其实有些东西没说清楚。
HEAD~3 表示从最后一个commit往前数4个的那次提交。
git rebase -i [start] [end] 为完整参数的参数,不写结束的时候表示结束为HEAD。
而且start到end的区间是前开后闭的,所以前面HEAD~3表示倒数第4次提交,但合并的是倒数3次提交。
在合并时也可以只合并中间的几次提交,不一定非得像文中一样都合并到最后一次的。
具体来说,想合并到其前一次提交的标记为s,想保留的标记为pick§。如有4次提交,前两次合并,后两次合并:

pick commit1
s commit2
pick commit3
s commit4

大家有什么疑问和自己的见解欢迎在评论区提出,非常希望能和大家有更多的交流。

  • 29
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
要将多次 commit 合并一次,你可以使用 Git 的 `rebase` 命令或者 `squash` 操作。下面是两种方法的介绍: 1. 使用 `rebase` 命令: - 首先,使用 `git log` 命令查看你需要合并commit 的哈希值,并确定你要合并的最早的 commit 和最晚的 commit。 - 运行 `git rebase -i <commit>`,将 `<commit>` 替换为最早的 commit 的哈希值。 - 在弹出的交互式界面中,将需要合并commit 前面的 `pick` 改为 `squash` 或者 `s`。 - 保存并关闭编辑器,Git 会自动打开另一个编辑器供你编辑 commit 的信息。 - 修改合并commit 的信息,保存并关闭编辑器。 - Git 会将这些 commit 合并成一个新的 commit。 2. 使用 `squash` 操作: - 运行 `git log` 命令查看你需要合并commit 的哈希值,并确定你要合并的最早的 commit 和最晚的 commit。 - 运行 `git rebase -i <commit>`,将 `<commit>` 替换为最早的 commit 的哈希值。 - 在弹出的交互式界面中,将需要合并commit 前面的 `pick` 改为 `squash` 或者 `s`。 - 保存并关闭编辑器,Git 会自动打开另一个编辑器供你编辑 commit 的信息。 - 修改合并commit 的信息,保存并关闭编辑器。 - Git 会将这些 commit 合并成一个新的 commit。 请注意,在使用 `rebase` 或 `squash` 操作之前,确保你在一个新的分支上工作,以防止修改历史提交。此外,注意备份你的代码,以防万一。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值