git怎样将多个提交归并为一个提交

[复制链接]
发表于 2026-1-18 06:16:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目次
第一种:利用git rebase下令
第二种:利用git reset下令 + 重新提交


第一种:利用git rebase下令

利用以下下令的此中一种启动交互式 rebase
  1. git rebase -i 你想要合并提交的父提交的哈希值
  2. git rebase -i <commit-hash>^  
  3. (^ 符号用于指定该提交的父提交,即你想要从这个父提交之后的所有提交开始 rebase)
  4. git rebase -i HEAD~n
  5. (n表示要合并的提交个数)
复制代码

比如你举行了五次提交
  1. C1 => C2 => C3 => C4 => C5
复制代码
如今你想把最新的C3、C4和C5这3个提交归并为一个提交,终极提交汗青像下面如许
  1. C1 => C2 => C345
复制代码
则你可以用以下三种下令中的一种
  1. git rebase -i C2的CommitID
  2. git rebase -i C3的CommitID^
  3. git rebase -i HEAD~3
复制代码
交互式 rebase 会打开一个文本编辑器(如 vim),列出你想要重新应用的提交,大概像下面如许。
  1. pick   C3的CommitID    C3的提交信息
  2. pick   C4的CommitID    C4的提交信息
  3. pick   C5的CommitID    C5的提交信息
  4. # 某注释内容
  5. # 某注释内容
  6. # 某注释内容
  7. # 某注释内容
  8. # 某注释内容
复制代码
你可以通过以下方式归并提交:


  • 将你想要归并的提交前面的 pick 改为 fixup 或 squash(两者都用于归并提交,但 squash 会生存归并提交的日志日志消息,而 fixup 会扬弃它,只生存第一个提交的日志日志消息)。
  • 你可以将除了第一个提交之外的全部提交都改为 fixup 或 squash,以将它们归并到第一个提交中。
比如你想把C3、C4和C5这3个提交归并为一个提交,且提交信息用C3的提交信息,则可以将温变编辑为像下面如许
  1. pick   C3的CommitID    C3的提交信息
  2. fixup   C4的CommitID    C4的提交信息
  3. fixup   C5的CommitID    C5的提交信息
  4. # 某注释内容
  5. # 某注释内容
  6. # 某注释内容
  7. # 某注释内容
  8. # 某注释内容
复制代码

然后生存你的更改并关闭编辑器。Git 将根据你的指示重新应用提交。
假如 rebase 过程中出现辩论,Git 会停息 rebase 并让你办理辩论。办理辩论后,利用 git add 来标志辩论已办理,并利用 git rebase --continue 来继承 rebase 过程。
假如 rebase 乐成完成,你的提交汗青就会更新,多个提交会被归并为一个提交。你可以利用 git log 来查察新的提交汗青。
第一种方法教学完毕。


第二种:利用git reset下令 + 重新提交

起首利用git log查察提交汗青,比如结果像下面如许
  1. 提交5 CommitHash5
  2.       提交5信息
  3. 提交4 CommitHash4
  4.       提交4信息
  5. 提交3 CommitHash3
  6.       提交3信息
  7. 提交2 CommitHash2
  8.       提交2信息
  9. 提交1 CommitHash1
  10.       提交1信息
复制代码
假如你想把提交5、提交4、提交3归并为一个提交,你可以先将版本回退到提交且在回退时生存工作区的变更,利用以下下令:
  1. git reset CommitHash2
复制代码
这条下令会将版本回退到提交2,这可以通过git log下令可以查察到。同时工作区内容仍为提交5版本的内容。
然后通过git status下令可以看到提交2到提交5之间的变更环境
然后你可以通过git add和git commit来天生一个提交,如许你就将提交5、提交4、提交3归并为了一个提交。
第二种方法教学完毕。


对于上面这种操纵,你的提交汗青就酿成了提交1 => 提交2 => 由345归并的谁人提交。
但是偶然,远端分支版本比力落后,而本地分支版本较新,远端分支版本到本地分支版本之间有多个提交,你想把这多个提交归并为一个提交。可以先将本地分支回退到长途分支一样的版本同时生存工作区的变更,利用以下下令:
  1. git fetch origin
  2. git reset origin/远端分支名称
  3. # 这里origin是远端仓库的别名
复制代码
然后和刚才一样,你可以通过git add和git commit来天生一个提交,如许你就将远端分支版本到本地分支版本之间的多个提交归并为了一个提交。

第三种:git commit --amend



end
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表