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

server/2024/10/18 8:38:50/

目录

git%20rebase%E5%91%BD%E4%BB%A4-toc" style="margin-left:0px;">第一种:使用git rebase命令

git%20reset%E5%91%BD%E4%BB%A4%20%2B%20%E9%87%8D%E6%96%B0%E6%8F%90%E4%BA%A4-toc" style="margin-left:0px;">第二种:使用git reset命令 + 重新提交


git%20rebase%E5%91%BD%E4%BB%A4" style="background-color:transparent;">第一种:使用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%20reset%E5%91%BD%E4%BB%A4%20%2B%20%E9%87%8D%E6%96%B0%E6%8F%90%E4%BA%A4" style="background-color:transparent;">第二种:使用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 reset origin/远端分支名称# 这里origin是远端仓库的别名

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



end


http://www.ppmy.cn/server/104442.html

相关文章

PCL-基于超体聚类的LCCP点云分割

目录 一、LCCP方法二、代码实现三、实验结果四、总结五、相关链接 一、LCCP方法 LCCP指的是Local Convexity-Constrained Patch&#xff0c;即局部凸约束补丁的意思。LCCP方法的基本思想是在图像中找到局部区域内的凸结构&#xff0c;并将这些结构用于分割图像或提取特征。这种…

mac安装ipa包【金铲铲为例】

mac安装ipa包 安装PlayCover 链接&#xff1a;https://github.com/PlayCover/PlayCover 1、点最新Releases 2、cmd ↓&#xff0c;拉到最下面下载dmg 3、安装 图标拖拽到Applications里 IPA下载 以金铲铲为例&#xff0c;良心砸壳包站点&#xff0c;有能力可以支持一下…

day40——IO模型补充

2.4 epoll模型 epoll模型只有linux系统才有 epoll模型只有从linxu内核2.4版本之后才有 epoll从2.4内核到目前的4.X内核&#xff0c;没有更新的模型了&#xff0c;说明epoll模型本身已经很完美了 select的问题&#xff1a; 监视列表无法扩容 监视列表和返回的激活列表混在了…

【计算机三级-数据库技术】数据库后台编程技术

内容提要 1、掌握存储过程的定义与使用 2、掌握用户定义函数的创建与使用 3、掌握触发器的定义与使用 4、掌握游标的定义与使用 第一节 存储过程 使用T-SQL语言编写&#xff0c;有两种方式存储&#xff1a; 在客户端存储代码通过客户端程序或SQL命令向DBMS发出操作请求&…

Android笔试面试题AI答之Kotlin(16)

文章目录 74. 解释何时需要泛型类型形参约束 &#xff1f;示例 75. Kotlin reified实化类参数的原理 &#xff1f;内联函数&#xff08;Inline Functions&#xff09;类型具体化&#xff08;Type Specialization&#xff09;实化类参数&#xff08;Reified Type Parameters&…

算法5:位运算

文章目录 小试牛刀进入正题 没写代码的题&#xff0c;其链接点开都是有代码的。开始前请思考下图&#xff1a; 小试牛刀 位1的个数 class Solution { public:int hammingWeight(int n) {int res 0;while (n) {n & n - 1;res;}return res;} };比特位计数 class Solution…

git如何进行版本回退

目录 情况1&#xff1a;工作区发生改变但还未git add 情况2&#xff1a;已经git add但还未git commit 情况3&#xff1a;已经git commit但还未git push 情况4&#xff1a;已经git push 情况1&#xff1a;工作区发生改变但还未git add 情况描述&#xff1a;工作区发生变化&…

Windows Server查看W3SVC IIS服务器中对应的网站日志

W3SVC日志文件夹中序号的含义&#xff0c;格式就是W3SVC网站ID 如果没有自定义站点的日志路径&#xff0c;日志默认的路径是C:\inetpub\logs\LogFiles\ 基本上每个网站存放日志的文件夹名称都是以W3SVC开头&#xff0c;区别在于后面的ID/编号/序号&#xff0c;对应的是网站各…