git将多次commit提交合并为一次

本文介绍如何使用git rebase-i命令将多次提交合并为一次。通过修改提交历史,将多个小的改动合并成一个完整的功能提交,简化提交历史,提高代码管理效率。

使用 git rebase -i 命令可以将指定版本之前的多次提交合并为一次。

1.先 git log 查看提交记录

2.执行 git rebase -i HEAD~2 或者 git rebase -i a91e660d

HEAD~2 是指当前版本的上 2 个版本
a91e660dd 为 9b45a0d4 前一次的提交记录

3.将 pick 改为 squash

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

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

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

修改第二行 pick 为 squash

pick:执行这个commit
squash:这个commit会合并到前一个commit

wq 保存后出现 commit message 界面

删除多余注释

重复vim命令进行编辑操作,最后输入wq保存后退出

4.再次 git log 查看提交记录

两次commit提交记录已经合并成为一次

5.最后执行 git push -f  强制推到远程上面

如果你想把本地分支的内容 强制推送覆盖远程分支,可以用 git push --force(常缩写 -f)。


基本用法

假设你当前在本地分支 feature/login,要强制推到远程同名分支:

git push origin feature/login --force

如果要强制推到远程的 main 分支:

git push origin feature/login:main --force

注意 ⚠️

  • 强制推送会覆盖远程分支历史,其他协作者的提交可能会丢失。

  • 如果你只是要覆盖 你自己本地对应的远程分支,可以用更安全的 --force-with-lease

    git push origin feature/login --force-with-lease
    

    它会在远程分支没有别人新增提交的情况下才覆盖。

### 将多个Git提交合并一次提交Git中,可以使用`git rebase -i`命令将多个提交压缩成一个提交。此方法通过交互式变基(interactive rebase)来实现。以下是具体操作: 运行以下命令以进入交互式变基模式,其中`[NUMBER OF COMMITS]`表示要合并提交数量: ```bash git rebase -i HEAD~[NUMBER OF COMMITS] ``` 例如,若需要合并最近的3个提交,则命令为: ```bash git rebase -i HEAD~3 ``` 执行上述命令后,会弹出一个文本编辑器,列出这些提交的记录。每条记录前有一个默认关键字`pick`,表示保留该提交[^4]。 为了合并提交,需要将除了第一条提交之外的所有其他提交的关键字从`pick`更改为`squash`或`fixup`。两者的区别在于: - `squash`:保留原始提交信息,并允许编辑合并后的提交信息。 - `fixup`:直接丢弃被合并提交的信息,仅保留第一个提交的信息。 完成修改后保存并关闭编辑器,Git将提示用户编辑最终的提交信息。如果选择了`squash`,则需要手动编写新的提交信息;如果选择了`fixup`,则无需任何操作[^1]。 另一种更简便的方法是使用`git reset --soft`命令。假设需要合并最近的3个提交,可以运行以下命令: ```bash git reset --soft HEAD~3 git commit -m "New commit message" ``` 此方法将指定范围内的提交重置为未提交状态,同时保留工作区和暂存区的内容。然后可以通过一个新的提交来覆盖之前的多个提交[^2]。 ### 注意事项 在进行上述操作之前,请确保当前分支没有与远程分支发生冲突,或者已经妥善处理了冲突。此外,如果分支已经推送到远程仓库,可能需要强制推送更改: ```bash git push --force ``` ### 示例代码 以下是完整的示例流程,假设需要合并最近的3个提交: ```bash # 方法一:使用交互式变基 git rebase -i HEAD~3 # 将第二、第三个提交改为 squash 或 fixup # 方法二:使用软重置 git reset --soft HEAD~3 git commit -m "Merged commits into one" git push --force ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值