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

【git】合并多个提交记录

1.说明

有时候因为某些小修改会导致代码多了很多不必要的提交,如果希望合并这些commit记录,我们可以使用rebase或者reset命令完成合并

2.rebase

这种方式是通过变基操作完成的,它适用于已经push到远程的情况,当我们变基好了之后再直接强制push到远程即可

2.1 查看已经提交的commit记录

git log --oneline

结果如下,那我这里只希望合并最后三个commit记录,所以我只关注最新的三个log就行

5cc3f74 (HEAD -> development, origin/development) LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
e9b346b LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
c51887f LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
...

2.2 rebase

我们要使用交互式命令,所以变基命令是git rebase -i HEAD~n,其中n是你要合并的commit个数,例如我这里要合并3个commit,那n就是3了,我的命令如下

git rebase -i HEAD~3

执行完命令之后它会打开一个交互环境,首先显示了你的commit记录,以pick开头,然后下面还有一些命令的使用说明,如下:

pick c51887f LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
pick e9b346b LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
pick 5cc3f74 LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)

# 变基 50c7aff..5cc3f74 到 50c7aff(3 个提交)
#
# 命令:
# p, pick <提交> = 使用提交
# r, reword <提交> = 使用提交,但编辑提交说明
# e, edit <提交> = 使用提交,但停止以便修补提交
...

现在我们需要修改一下记录,第一个commit记录前面的pick不动,把后面的commit记录前面的pick都改成squash,因为squash的特点就是会丢弃每个小步骤的详细记录,达到合并多个commit记录的效果

修改如下:

pick c51887f LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
squash e9b346b LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
squash 5cc3f74 LOAN-5910 PDF Statement Download when user link bank (BOC/HSBC/HANGSENG/SC/SANDBOX)
...

提示:git一般会使用vim打开,所以你可以输入i进入编辑模式,编辑好了之后再按:再输入wq再回车就能保存退出了

当你保存退出之后git又会打开另一个页面,可以编辑一下commit的massage,然后保存退出就行

2.3 提交记录

如果之前已经推送到远程分支了,你需要使用git push --force命令强制推送,但是如果别人也在使用该分支,可能会出现冲突,别忘了先让他pull一下解决冲突

3. reset

git的reset命令就是回到之前的某个提交,但是你一定要使用--soft参数,这样才能保留已经改动的文件。比如说我们还是要合并3个commit记录,则命令如下:

git reset --soft HEAD~3

等reset之后我们再把这些文件再次提交就行,当然需要配合--amend参数

git commit --amend
git commit -m "这是你的提交信息"

最后再配合--force命令把它强制推送到远程就行,记得让其他人先pull一下合并冲突

git push --force

相关文章:

  • C++学习笔记第一天(vs工程创建+基本知识)
  • Tesla T4 显卡 Linux 64-bit Ubuntu 24.04 驱动和cuda系统支持版本
  • 应用层的协议-http/https的状态码
  • Mac下常用命令
  • 【产品小白】社交类app怎么设计
  • 数据结构-图-找出星型图的中心节点
  • 服务器socket端口绑定失败解决方案
  • 数学建模之数学模型-1:线性规划
  • 【天线】IFA天线知识点摘抄
  • 1.20作业
  • github 怎么创建一个私有repository 并从另外一台电脑拉取下来更新
  • cuda安装
  • poi 的导入导出 报表
  • 聊聊istio服务网格
  • leetcode_位运算 191.位1的个数
  • 网络安全知识:网络安全网格架构
  • List的基本功能(1)
  • Java List 自定义对象排序 Java 8 及以上版本使用 Stream API
  • 服务器释放screen资源(Detached状态并不会释放资源)
  • C++ 设计模式 - 策略模式
  • 珠宝网站建设公司/百度推广服务费3000元
  • 建设银行的英语网站首页/最新发布的最新
  • wordpress in排序/西安seo报价
  • 做情趣用品网站需要哪些资质/企业专业搜索引擎优化
  • 公司网站彩页怎么做/雅虎搜索引擎
  • 绍兴市越城区建设局网站/店铺运营方案策划