当前位置:首页 > 开发工具 > git rebase合并多个commit总结

git rebase合并多个commit总结

2022年09月16日 23:14:03开发工具6

git rebase 合并多个commit 方法

在开发过程中,有时一个任务会分几次commit提交,这样可能对于有些分支要cherry pick时会比较麻烦,这是我们可以通过git rebase 将几个commit合并为一个commit,再推送到远端

git rebase -i

这里指的是通过交互的手段执行git rebase, 也是合并commits 的好方法

例子

假设当前git日志文件内容是这样

➜  test git:(master) git log --oneline
bb44232 (HEAD -> master) 增加第f行
5d2e760 增加第b行,增加第c行
f443e25 增加第a行,增加第行
48d5c58 增加第6行,增加第7行,增加第8行
c4b45e6 增加第五行
0469b01 增加第四行,修改commit
cd80e8f 22222
295e1a6 11111
a772b51 1. 增加testgit文件

我想合并这几个commit

bb44232 (HEAD -> master) 增加第f行
5d2e760 增加第b行,增加第c行
f443e25 增加第a行,增加第行
48d5c58 增加第6行,增加第7行,增加第8行

1. 要先找出48d5c58 增加第6行,增加第7行,增加第8行之前的commit-id c4b45e6

执行以下命令

git rebase -i c4b45e6

会进入vim 并显示以下内容

pick 48d5c58 增加第6行,增加第7行,增加第8行
pick f443e25 增加第a行,增加第行
pick 5d2e760 增加第b行,增加第c行
pick bb44232 增加第f行

# Rebase c4b45e6..bb44232 onto c4b45e6 (4 commands)
#
# 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
# d, drop = remove commit
#
# 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

命令参数解释:

pick:保留该commit(缩写:p)

reword:保留该commit,但我需要修改该commit的注释(缩写:r)

edit:保留该commit, 但我要停下来修改该提交(不仅仅修改注释)(缩写:e)

squash:将该commit和前一个commit合并(缩写:s)

fixup:将该commit和前一个commit合并,但我不要保留该提交的注释信息(缩写:f)

exec:执行shell命令(缩写:x)

drop:我要丢弃该commit(缩写:d)

将下面几行的pick 换成s 即可,代表将下面几个合并到最近的(即pick 48d5c58)commit上,并生成一个新的commit(包括48d5c58就都没有了)

pick 48d5c58 增加第6行,增加第7行,增加第8行
s f443e25 增加第a行,增加第行
s 5d2e760 增加第b行,增加第c行
s bb44232 增加第f行

# Rebase c4b45e6..bb44232 onto c4b45e6 (4 commands)
# ...

之后可能冲突(跨commit rebase时可能会冲突),就解决冲突

然后执行git addgit rebase --continue

最后会弹出vim,让你填写这个最后合并的commit的注释信息

填写完 wq,就ok了

执行成功信息

➜  test git:(master) git rebase -i c4b45e6
[detached HEAD 7d9155b] 增加第6行,增加第7行,增加第8行;增加第a行,增加第行;增加第b行,增加第c行
 Date: Tue Aug 13 17:46:37 2019 +0800
 2 files changed, 17278 insertions(+)
 create mode 100644 package-lock.json
Successfully rebased and updated refs/heads/master.

查看git 日志

7d9155b (HEAD -> master) 增加第6行,增加第7行,增加第8行;增加第a行,增加第行;增加第b行,增加第c行
c4b45e6 增加第五行
0469b01 增加第四行,修改commit
cd80e8f 22222
295e1a6 11111
a772b51 1. 增加testgit文件
42c86e2 Initial commit from Create React App

可以看到c4b45e6之上的commit都合成了一个commit了(即7d9155b,一个新的commitid)

作者:明月照江江
来源链接:https://www.cnblogs.com/gradyblog/p/16057734.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/tool/42255.html

标签: Git合并
分享给朋友:

“git rebase合并多个commit总结” 的相关文章

Git常见错误(附解决办法)

目录 1.Unable to create 'F:/Git/.git/index.lock': File exists. 2.committing is not possible because you hav...

Git SSH Key 生成并添加到github/gitee步骤

Git SSH Key 生成并添加到github/gitee步骤

Git SSH Key 生成并添加到github/gitee步骤 在本地生成密钥 大家好,这里是坚果前端小课堂,欢迎大家关注我的公众号,“坚果前端” Git是分布式的代码管理工具,远程的代码管理是基于SSH的,所以要使用远程的Git则需...

一个项目多个git仓库

需求: 公司的git不好随便提交,所以需要一个自己的git,方便家里和公司同步。 1.取出项目 2.建立自己的仓库,我使用的是gitee 3.本地项目增加gitee仓库(空的仓库)git remote add XXX(别名...

Git的安装教程(完成clone一个项目到本地)

Git的安装教程(完成clone一个项目到本地)

官网下载安装包地址:点击进入 https://git-scm.com/download/win 但是官网下载比较慢,我们这里选择国内阿里镜像点击进入 https://npm.taobao.org/mirro...

Git批量删除本地分支

删除分支命令 删除一条分支: git branch -D branchName 删除当前分支外的所有分支: git branch | xargs git branch -d 删除分...

git中全局设置用户名

git中全局设置用户名

前提 安装git,右键打开git bashCLS 1、查看git配置信息 此命令可以查看所有的配置信息 git config --list 2、查看git用户名 git config us...

Git提交代码步骤

Git提交代码步骤

目录 1.Git提交代码步骤 1.1 第1步:同步远程仓库代码:git pull 1.2 第1步:查看当前状态:git status 1.3 第2步:提交代码到本地git缓...

GIt在pyCharm的使用教程

GIt在pyCharm的使用教程

GIt在pyCharm的使用教程 目录 GIt在pyCharm的使用教程 (一)Git的安装和配置 (二)在pycharm中配置git (三)创建仓库 (四)一些基础操作 (五)建立远程仓库提交代码   ...

Git使用手册--超级详细,自己都看哭了

Git使用手册--超级详细,自己都看哭了

Git 一.git简介 Git是目前世界上最先进的分布式版本控制系统(没有之一)。 关于版本控制系统: 版本控制是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统.有了它你就可以将选定的文件回溯到之前的状态,甚至...

git cz 使用方法

git cz 使用方法 一,配置git cz 首先需要安装nodejs,因为要使用npm 控制台输入 npm install -g commitizen #若速度较慢就用cnpm cnpm install -g commi...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。