当前位置: 首页 > news >正文

git如何将多个提交合并为一个提交

目录

第一种:使用git rebase命令

第二种:使用git reset命令 + 重新提交


第一种:使用git rebase命令

使用以下命令的其中一种启动交互式 rebase

git rebase -i 你想要合并提交的父提交的哈希值git rebase -i <commit-hash>^  
(^ 符号用于指定该提交的父提交,即你想要从这个父提交之后的所有提交开始 rebase)git rebase -i HEAD~n
(n表示要合并的提交个数)

比如你进行了五次提交

C1 => C2 => C3 => C4 => C5

现在你想把最新的C3、C4和C5这3个提交合并为一个提交,最终提交历史像下面这样

C1 => C2 => C345

则你可以用以下三种命令中的一种

git rebase -i C2的CommitIDgit rebase -i C3的CommitID^git rebase -i HEAD~3

交互式 rebase 会打开一个文本编辑器(如 vim),列出你想要重新应用的提交,大概像下面这样。

pick   C3的CommitID    C3的提交信息
pick   C4的CommitID    C4的提交信息
pick   C5的CommitID    C5的提交信息# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容

你可以通过以下方式合并提交:

  • 将你想要合并的提交前面的 pick 改为 fixup 或 squash(两者都用于合并提交,但 squash 会保留合并提交的日志消息,而 fixup 会丢弃它,只保留第一个提交的日志消息)。
  • 你可以将除了第一个提交之外的所有提交都改为 fixup 或 squash,以将它们合并到第一个提交中。

比如你想把C3、C4和C5这3个提交合并为一个提交,且提交信息用C3的提交信息,则可以将温变编辑为像下面这样

pick   C3的CommitID    C3的提交信息
fixup   C4的CommitID    C4的提交信息
fixup   C5的CommitID    C5的提交信息# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容
# 某注释内容

然后保存你的更改并关闭编辑器。Git 将根据你的指示重新应用提交。

如果 rebase 过程中出现冲突,Git 会暂停 rebase 并让你解决冲突。解决冲突后,使用 git add 来标记冲突已解决,并使用 git rebase --continue 来继续 rebase 过程。

如果 rebase 成功完成,你的提交历史就会更新,多个提交会被合并为一个提交。你可以使用 git log 来查看新的提交历史。

第一种方法讲解完毕。



第二种:使用git reset命令 + 重新提交

首先使用git log查看提交历史,比如结果像下面这样

提交5 CommitHash5提交5信息提交4 CommitHash4提交4信息提交3 CommitHash3提交3信息提交2 CommitHash2提交2信息提交1 CommitHash1提交1信息

如果你想把提交5、提交4、提交3合并为一个提交,你可以先将版本回退到提交且在回退时保留工作区的变动,使用以下命令:

git reset CommitHash2

这条命令会将版本回退到提交2,这可以通过git log命令可以查看到。同时工作区内容仍为提交5版本的内容。

然后通过git status命令可以看到提交2到提交5之间的变动情况

然后你可以通过git add和git commit来生成一个提交,这样你就将提交5、提交4、提交3合并为了一个提交。

第二种方法讲解完毕。



对于上面这种操作,你的提交历史就变成了提交1 => 提交2 => 由345合并的那个提交。

但是有时,远端分支版本比较落后,而本地分支版本较新,远端分支版本到本地分支版本之间有多个提交,你想把这多个提交合并为一个提交。可以先将本地分支回退到远程分支一样的版本同时保留工作区的变动,使用以下命令:

git fetch origingit reset origin/远端分支名称# 这里origin是远端仓库的别名

然后和刚才一样,你可以通过git add和git commit来生成一个提交,这样你就将远端分支版本到本地分支版本之间的多个提交合并为了一个提交。



end


http://www.mrgr.cn/news/12969.html

相关文章:

  • Linux网络
  • Maven基本使用
  • 本地化云桌面系统环境VMware horizon搭建
  • Zotero打开后所有文献及笔记都消失了
  • Spring Boot使用拦截器(Interceptor)
  • 黑神话悟空无法登录服务器怎么办
  • 数据库系统 第28节 数据库迁移 案例分析
  • iOS 苹果健康-睡眠
  • 3D工艺大师:精准助力医疗设备远程维修
  • Redis key的过期时间和永久有效
  • 2024华为性格测试机考真题丨不会有人OD机试满分结果挂在性格测试上了吧?
  • golang RSA 解密前端jsencrypt发送的数据时异常 crypto/rsa: decryption error 解决方法
  • Linux的log日志排查
  • 【2025校招】4399 NLP算法工程师笔试题
  • ProxySQL 读写分离配置
  • 搭建自己的GPT
  • 【java17】java17新特性之日期周期格式化
  • 【Rust光年纪】深度探索:Rust语言中的文本分析与自然语言处理库综述
  • Leetcode面试经典150题-13.罗马数字转整数
  • 高级调度1