git如何把多个commit合成一个

打印 上一主题 下一主题

主题 1489|帖子 1489|积分 4477

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

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

x
在 Git 中,如果你想把多个提交(commit)归并成一个,可以使用 git rebasegit reset 来完成。下面是两种常用方法:
方法一:使用 git rebase(推荐)

git rebase 是归并多个提交为一个提交的最常见方法。以下是详细步骤:

  • 打开 Git 终端,进入你的 Git 堆栈目次。
  • 执行交互式 rebase:假设你要归并最近的 n 个提交,运行以下下令:
    1. git rebase -i HEAD~n
    复制代码
    其中,n 是你想要归并的提交数目。例如,如果你想归并最近的 3 次提交,下令应该是:
    1. git rebase -i HEAD~3
    复制代码
  • 选择要归并的提交:运行这个下令后,Git 会打开一个文本编辑器,显示最近 n 次提交,格式如下:
    1. pick a1b2c3d Commit message 1
    2. pick d4e5f6g Commit message 2
    3. pick h7i8j9k Commit message 3
    复制代码

    • pick 表示保留该提交。
    • 你需要将除了第一个提交以外的全部 pick 改为 squash 或 s。例如,归并最近的三个提交:
    1. pick a1b2c3d Commit message 1
    2. squash d4e5f6g Commit message 2
    3. squash h7i8j9k Commit message 3
    复制代码

  • 保存并退出编辑器:保存文件并退出编辑器(通常是 :wq 对于 Vim 编辑器)。
  • 编辑归并后的提交信息:接下来,Git 会打开另一个编辑器,让你归并多个提交信息。你可以选择保留某些信息,删除不需要的部分,然后保存退出。
  • 完成 rebase:保存并退出后,Git 会自动归并这些提交为一个。
  • 推送到长途堆栈(如果需要):如果你已经将这些提交推送到长途堆栈,你需要使用 --force 参数来推送:
    1. git push --force
    复制代码
    注意:逼迫推送会覆盖长途堆栈的汗青,以是如果其他人也在基于这些提交工作,可能会导致冲突。

方法二:使用 git reset(实用于尚未推送的提交)

如果这些提交尚未推送到长途堆栈,你也可以使用 git reset 来回到某个提交,并将背面的提交归并成一个新的提交。

  • 软重置到指定提交:首先,使用 git reset 回到你想要归并的基准提交。假设你要归并最近的 3 次提交,可以执行:
    1. git reset --soft HEAD~3
    复制代码
    这会将工作区和暂存区的文件保留,但回退到上一个提交。
  • 创建一个新的提交:现在你可以将这些更改作为一个新的提交。执行:
    1. git commit --amend
    复制代码
    大概:
    1. git commit -m "合并后的新提交信息"
    复制代码
  • 推送到长途堆栈(如果需要):如果之前已经推送过,你也需要逼迫推送:
    1. git push --force
    复制代码

结论



  • git rebase 是最常用的方法,实用于你需要保留提交汗青的场景。
  • git reset 实用于你想要回退到某个点并重新整理提交的环境,尤其在尚未推送时。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

来自云龙湖轮廓分明的月亮

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表