git如何合并多个commits
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相关推荐
- Git 如何合并commits成一个(squash)
Git 如何合并commits成一个(squash) 方法一:使用git rebase 方法二:使用git reset 两种方法. 方法一:使用git rebase 本地先从upstream拉一个br ...
- Git:合并特定commits 到另一个分支
经常被问到如何从一个分支合并特定的commits到另一个分支.有时候你需要这样做,只合并你需要的那些commits,不需要的commits就不合并进去了. 合并某个分支上的单个commit 首先,用g ...
- git如何合并指定文件内容_Git合并指定文件到另一个分支
经常被问到如何从一个分支合并特定的文件到另一个分支.其实,只合并你需要的那些commits,不需要的commits就不合并进去了. 合并某个分支上的单个commit 首先,用git log或sourc ...
- 讲讲Git如何合并分支(一)
本章介绍在Idea2019.2版本下,对于常见的Git分支合并操作和解决方案! 1.准备环境 编译器:Idea2019.2 git仓库:gitlab 分支:master+chenxin1 两个分支的代 ...
- Git分支合并:Merge、Rebase的选择
git代码合并:Merge.Rebase的选择 - iTech - 博客园 http://www.cnblogs.com/itech/p/5188932.html Git如何将一个分支的修改同步到另一 ...
- git merge合并时遇上refusing to merge unrelated histories的解决方案
如果git merge合并的时候出现refusing to merge unrelated histories的错误,原因是两个仓库不同而导致的,需要在后面加上--allow-unrelated-hi ...
- c++两个vector合并_这才是真正的 Git——分支合并
本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...
- git如何合并指定文件内容_git小技巧--如何从其他分支merge个别文件或文件夹
在实际工作中,一个大型的项目或版本迭代可能不是一次上线,可能会分好几次上线,这时候就会涉及创建多个分支,进行分别开发. 创建分支 功能分为2个分支,分别为A.B. A上面有个列表页功能 B上面有个详情 ...
- 这才是真正的 Git——分支合并
本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...
最新文章
- predicate 列存储索引扫描_在SQL SERVER中导致索引查找变成索引扫描的问题分析
- 5个最佳的Android测试框架
- mysql 互为主从复制常见问题
- 前端学习(1735):前端系列javascript之TypeScript介绍
- python权重初始值设置_pytorch自定义初始化权重的方法
- php在客户端禁用cookie时让session不失效的解决方法
- Boltzmann 玻尔兹曼机(BM)
- 24.磁盘配额(Quota)
- c#用友U8API开发之环境搭建(1)
- 如何抓取html请求,网页抓取工具如何进行http模拟请求
- java教程配置通达信_通达信公式转换JAVA,一招最绝的选股技巧
- 使用计算机编辑文档的同时 还可播放mp3,win7系统电脑怎么使用Windows Movie Maker剪辑音频文件...
- arcgis 发布服务
- 台式计算机启用时间查看,win7系统如何查看电脑的开关机时间想知道是否有他人使用...
- comparator 字符串比较大小_Java8 - 使用 Comparator.comparing 进行比较排序
- 批量生成insert语句的方法(word转excel,excel用公式生成insert)
- Freertos基本概念----(猫和老鼠)
- ps命令 proc文件系统
- android手机功能创新,Android手机QQ浏览器1.1发布多项创新功能
- Hive的核心概念以及建库建表语句
热门文章
- 手机9宫格图案解锁方法总数计算
- java碳纤维折叠自行车和鸟车_知识 | 碳纤维自行车优缺点,供大家参考一下
- rtx4000显卡什么级别 rtx4000显卡属于哪个级别
- 成功解决 映射网络驱动器 出现windows无法访问 xxx.xxx.xxx.xxx
- 李阳疯狂英语突破对话(30)-我饿死了
- redis续期_redis分布式锁自动延长过期时间
- C++ windows 创建快方式
- 操作系统无法识别光驱问题解决
- docker是干什么的,docker常用命令
- Excel实现数据转置,很方便操作