git如何合并多个commits

使用场景

在分支开发的时候,我们经常会在分支上有多个commit,然而在最后开发完成合并到主干(或者发布分支)的时候,我们希望能把这些commit合并成一个,这样在主干看来只做了一次commit,因为在开发分支上有些时候只有一点点改动就产生了一个commit,合并到主干后会显得commit过多过于零散。

第0步切换到你的分支

$ git checkout <branchname>

第一步找出你的commits

$ git log --oneline
1959093 [BUG-4668] Add rollback script
f41c79b [BUG-4668] Let backup configure time once
d8b3f48 Merge pull request #128 in <project/repo> from BUG-4668 to develop
30b5d3d BUG-4668 use local copy of images instead of remote format
...

现在我们需要把前两个commit合并成一个。

第二步 合并commit

$ git rebase -i d8b3f48

注意这里这个hash(d8b3f48),不是你要merge的任何一个commit,而是你改动的基础commit,这就是rebase的参照commit。
也可以使用另外一种写法:

$ git rebase -i HEAD~2

数字2表示合并最近的两个commit:git rebase -i HEAD~[NUMBER OF COMMITS]
参数i表示interactive的方式,这样会弹出一个窗口让你进行编辑:

pick f41c79b [BUG-4668] Let backup configure time once
pick 1959093 [BUG-4668] Add rollback script# Rebase d8b3f48..1959093 onto d8b3f48
#
# Commands:
#  p, pick = use commit
#  r, reword = use commit, but edit the commit message
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#  f, fixup = like "squash", but discard this commit's log message
#  x, exec = run command (the rest of the line) using shell
#
# These lines can be re-ordered; they are executed from top to bottom.
#
# If you remove a line here THAT COMMIT WILL BE LOST.
#
# However, if you remove everything, the rebase will be aborted.
#
# Note that empty commits are commented out

然后我们编辑新的commit的内容:

pick f41c79b [BUG-4668] Add rollback scripts and fix several backup script minors
fixup 1959093 [BUG-4668] Add rollback script
...

关于pick和fixup的含义,窗口里面有详细介绍;通常我们把第一个作为提交的内容,选择pick,并且把message修改为一个综合的描述信息,然后把所有的其他commits都选为fixup,这样合并后只有个commit历史,包含之前所有的commits改动和第一个修正过的commit的message。

编辑完之后按:wq退出:

$ git rebase -i d8b3f48
[detached HEAD 1660c81] [BUG-4668] Let backup configure time once5 files changed, 235 insertions(+), 18 deletions(-)
Successfully rebased and updated refs/heads/develop-BUG-4668.

再次确认改动结果:

$ git log --oneline
1660c81 [BUG-4668] Let backup configure time once
d8b3f48 Merge pull request #128 in <project/repo> from BUG-4668 to develop

这个地方要注意一下log message是不是想要的,我经常就碰到不是我想要的内容,不知道是不是git的一个bug还是我操作的错误;如果不一致就行--amend命令修复一下:

$ git commit --amend

注意:--amend只能修复最后commit的log message。

可见被合并成了一个commit了:

  1959093
+ f41c79b
= 1660c81

第三步:push

如何之前做个push代码到远端了,那么需要强制再push一次:

$ git push origin <branchname> --force

git如何合并多个commits相关推荐

  1. Git 如何合并commits成一个(squash)

    Git 如何合并commits成一个(squash) 方法一:使用git rebase 方法二:使用git reset 两种方法. 方法一:使用git rebase 本地先从upstream拉一个br ...

  2. Git:合并特定commits 到另一个分支

    经常被问到如何从一个分支合并特定的commits到另一个分支.有时候你需要这样做,只合并你需要的那些commits,不需要的commits就不合并进去了. 合并某个分支上的单个commit 首先,用g ...

  3. git如何合并指定文件内容_Git合并指定文件到另一个分支

    经常被问到如何从一个分支合并特定的文件到另一个分支.其实,只合并你需要的那些commits,不需要的commits就不合并进去了. 合并某个分支上的单个commit 首先,用git log或sourc ...

  4. 讲讲Git如何合并分支(一)

    本章介绍在Idea2019.2版本下,对于常见的Git分支合并操作和解决方案! 1.准备环境 编译器:Idea2019.2 git仓库:gitlab 分支:master+chenxin1 两个分支的代 ...

  5. Git分支合并:Merge、Rebase的选择

    git代码合并:Merge.Rebase的选择 - iTech - 博客园 http://www.cnblogs.com/itech/p/5188932.html Git如何将一个分支的修改同步到另一 ...

  6. git merge合并时遇上refusing to merge unrelated histories的解决方案

    如果git merge合并的时候出现refusing to merge unrelated histories的错误,原因是两个仓库不同而导致的,需要在后面加上--allow-unrelated-hi ...

  7. c++两个vector合并_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

  8. git如何合并指定文件内容_git小技巧--如何从其他分支merge个别文件或文件夹

    在实际工作中,一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,进行分别开发. 创建分支 功能分为2个分支,分别为A.B. A上面有个列表页功能 B上面有个详情 ...

  9. 这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

最新文章

  1. predicate 列存储索引扫描_在SQL SERVER中导致索引查找变成索引扫描的问题分析
  2. 5个最佳的Android测试框架
  3. mysql 互为主从复制常见问题
  4. 前端学习(1735):前端系列javascript之TypeScript介绍
  5. python权重初始值设置_pytorch自定义初始化权重的方法
  6. php在客户端禁用cookie时让session不失效的解决方法
  7. Boltzmann 玻尔兹曼机(BM)
  8. 24.磁盘配额(Quota)
  9. c#用友U8API开发之环境搭建(1)
  10. 如何抓取html请求,网页抓取工具如何进行http模拟请求
  11. java教程配置通达信_通达信公式转换JAVA,一招最绝的选股技巧
  12. 使用计算机编辑文档的同时 还可播放mp3,win7系统电脑怎么使用Windows Movie Maker剪辑音频文件...
  13. arcgis 发布服务
  14. 台式计算机启用时间查看,win7系统如何查看电脑的开关机时间想知道是否有他人使用...
  15. comparator 字符串比较大小_Java8 - 使用 Comparator.comparing 进行比较排序
  16. 批量生成insert语句的方法(word转excel,excel用公式生成insert)
  17. Freertos基本概念----(猫和老鼠)
  18. ps命令 proc文件系统
  19. android手机功能创新,Android手机QQ浏览器1.1发布多项创新功能
  20. Hive的核心概念以及建库建表语句

热门文章

  1. 手机9宫格图案解锁方法总数计算
  2. java碳纤维折叠自行车和鸟车_知识 | 碳纤维自行车优缺点,供大家参考一下
  3. rtx4000显卡什么级别 rtx4000显卡属于哪个级别
  4. 成功解决 映射网络驱动器 出现windows无法访问 xxx.xxx.xxx.xxx
  5. 李阳疯狂英语突破对话(30)-我饿死了
  6. redis续期_redis分布式锁自动延长过期时间
  7. C++ windows 创建快方式
  8. 操作系统无法识别光驱问题解决
  9. docker是干什么的,docker常用命令
  10. Excel实现数据转置,很方便操作