当前位置:   article > 正文

git 合并多次提交记录(commit)_git rebase devel

git rebase devel

一、应用场景

在开发过程中,对于一个完整的功能可能会先后进行多次提交。这种及提交方式不利于与代码走查时或者后期回顾功能点影响范围。为此,应该将多次提交合并为一次提交。

二、git rebase合并提交

例如当前提交如下:

  1. [root@node2 test]# git log
  2. commit 91bfbb8f599fa0129f28f9c4fd85e9feeca335be
  3.     功能:提交DockerFile
  4. commit 56f27c0cd2f6e0c4d60b4b36526ea352ad7da5b8
  5.     功能:提交DockerFile
  6. commit 7dbba7b7b46aa47bb57d109cd6c4dac3f3485a0a
  7.     功能:提交DockerFile与构建脚本、日志类型输出字符串
  8. commit ae459d7a16e878276e6bb391c16ad4b4d0d23a47
  9.     功能:增加选项--no-web-service 关闭webService

若我想合并前3次提交即从 91bfbb8.. 到 7dbba7b... 的提交,以下为操作步骤:

1、找到要合并的提交的前一次 commit id

这里是 ae459d7...(增加选项–no-web-service 关闭webService);

2、使用 git rebase -i <前一次commit id>  开始合并:
  1. git rebase -i ae459d7a16e878276e6bb391c16ad4b4d0d23a47
  2. git rebase -i HEAD~3  # 3表示合并前3次提交

3、此时弹出交互框,列出了需要合并的所有提交:

  1. pick 7dbba7b 功能:提交DockerFile与构建脚本、日志类型输出字符串
  2. pick 56f27c0 功能:提交DockerFile
  3. pick 91bfbb8 功能:提交DockerFile
  4. # 变基 ae459d7..0d23a47 到 ae459d73 个提交)
  5. #
  6. # 命令:
  7. # p, pick <提交> = 使用提交
  8. # r, reword <提交> = 使用提交,但修改提交说明
  9. # e, edit <提交> = 使用提交,进入 shell 以便进行提交修补
  10. # s, squash <提交> = 使用提交,但融合到前一个提交
  11. # f, fixup <提交> = 类似于 "squash",但丢弃提交说明日志
  12. # x, exec <命令> = 使用 shell 运行命令(此行剩余部分)
  13. # b, break = 在此处停止(使用 'git rebase --continue' 继续变基)
  14. # d, drop <提交> = 删除提交
  15. # l, label <label> = 为当前 HEAD 打上标记
  16. # t, reset <label> = 重置 HEAD 到该标记
  17. # m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
  18. # .       创建一个合并提交,并使用原始的合并提交说明(如果没有指定
  19. # .       原始提交,使用注释部分的 oneline 作为提交说明)。使用
  20. # .       -c <提交> 可以编辑提交说明。
  21. #
  22. # 可以对这些行重新排序,将从上至下执行。
  23. #
  24. # 如果您在这里删除一行,对应的提交将会丢失。
  25. #
  26. # 然而,如果您删除全部内容,变基操作将会终止。
  27. #

修改commit之前的单词,第一个commit保留为pick(以此为基础?),后续的commit修改为s,

  1. pick 7dbba7b 功能:提交DockerFile与构建脚本、日志类型输出字符串
  2. s 56f27c0 功能:提交DockerFile
  3. s 91bfbb8 功能:提交DockerFile
  4. # 省略

修改完后,保存并退出(交互式框是vi编辑框,保存并退出的方法与vi操作相同)4、此时会再次弹出交互式对话框,用于设置提交的消息:

  1. # 这是一个 3 个提交的组合。
  2. # 这是第一个提交说明:
  3. 功能:提交DockerFile与构建脚本、日志类型输出字符串
  4. # 这是提交说明 #2:
  5. 功能:提交DockerFile
  6. # 这是提交说明 #3:
  7. 功能:提交DockerFile
  8. # 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
  9. # 省略 ......


若需要修改提交消息,将上面删除然后修改,例如修改如下:

  1. 功能:提交DockerFile与构建脚本、日志类型输出字符串
  2. # 请为您的变更输入提交说明。以 '#' 开始的行将被忽略,而一个空的提交
  3. # 省略 ......

修改完后,保存并退出(交互式框是vi编辑框,保存并退出的方法与vi操作相同)5、此时完成了本地仓库中commit的合并,可以通过git log查看合并后的效果

  1. [root@node2 test]# git log
  2. commit e66a398f3ae8889ec39ffae51cf1ddf773098dac
  3.     功能:提交DockerFile与构建脚本、日志类型输出字符串
  4. commit ae459d7a16e878276e6bb391c16ad4b4d0d23a47
  5.     功能:增加选项--no-web-service 关闭webService

 6、如果之前的提交已经同步到git服务器,可以使用git push -f 强制将本地仓库同步至git服务器(可选)
————————————————
版权声明:本文为CSDN博主「21岁被迫秃头」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_47733361/article/details/133907433

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/68091
推荐阅读
相关标签
  

闽ICP备14008679号