交互式git base(git rebase -i)用法示例

本文详细介绍Git中的Rebase命令,包括基本概念及实际应用场景。通过一个具体示例,演示如何使用交互式Rebase来修改提交历史,如删除提交、修改提交内容、合并提交等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

详解git rebase

rebase的基本概念

请参考
http://git-scm.com/book/zh/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%9A%84%E8%A1%8D%E5%90%88 和 http://gitbook.liuhui998.com/4_2.html 
这两篇文章对git rebase的基本概念介绍的比较详细。

rebase实例讲解

下面我重点要讲的是rebase在使用时的细节。
实例如下:
假设我本地比远程服务器多出5次提交,如下图所示

我不想要中间的第3次commit,即"third"我不想要了,我想修改第2次提交"second"的内容,修改第1次提交的message,合并第四和第五次提交为一个提交。 
执行过程如下:
在git bash中执行如下命令:
git rebase –i

会自动进入vi编辑器,如下图示

通过编辑各个commit来进行相关的操作。
常用的对commit的操作有5种:
p, pick = 使用此commit。(p是pick命令的缩写,两种方式均支持)
r, reword = 使用此commit, 编辑commit message
e, edit = 使用此commit,但是不编辑commit message,保持原有commit message
s, squash = 使用此commit,但是合并到前一个commit中去
f, fixup = 和squash类似,但是放弃此commit的message
commit应用的顺序可以调整,rebase操作将从上到下执行。
如果不使用此commit,则删除此行。
如果所有行都被删除,则放弃rebase操作。 
那么要实现之前的目标:
不想要中间的第3次commit,即"third"我不想要了,我想修改第2次提交"second"的内容,修改第1次提交的message,合并第四和第五次提交为一个提交。 
编辑这些行,如下图所示,第一个提交使用r,第二个提交使用edit,第三个提交删除行,第四个提交使用pick,第五个提交使用squash。修改完成后,保存退出。


因为是交互式rebase,会弹出第一次提交的message让你修改,将message修改为first reword.
然后保存退出。

第二次提交选择了修改内容,则用户可以修改代码文件修复原来的提交,也可以不修改,继续后面的rebase,git bash上提示了您接下来的操作。

修改文件后,执行git commit –amend。

将提交message改为second edit

继续rebase,执行git rebase –continue,由于我们放弃了中间的第3次提交,会碰到许多错误,其间的错误请通过git status命令查看解决方法。

此时碰到冲突,在windows文本编辑器中解决冲突,解决冲突后使用git add filename告诉git已经解决完冲突。

查看当前仓库状态git status

提示需要执行git commit –amend

继续rebase,执行git rebase –continue,rebase过程中碰到问题, 请查看图片中的红字。

继续rebase,git continue –rebase

继续rebase,git continue –rebase

查看历史,实现了我们之前的目标。


具体应用场景:

场景:

gerrit code review,编号123123123的提交对应的commit有问题,需要提交新的patch来修改这一问题;而45644依赖于123123123,此时应如何操作?

 

操作步骤:

1、  checkout右侧列表中Related Changes排在最上的review,此处为45644;单击45644,Download->checkout,拷贝指令

2、  在本地仓库右键->git bash

3、  粘贴拷贝的指令

4、  创建一个新的分支git checkout –b xxxx,其中xxx为分支名称,仅用于此次patch操作

5、git rebase -i交互式修改之前的patch,rebase的使用详情参见:4.常用操作#4.常用操作-_Toc394777088详解gitrebase,tortoisegit图形化可参考4.Tortoisegit#4.Tortoisegit-_Toc394850800Tortoisegitrebase

6、git add 修改过的文件

7、git commit --amend

8、git rebase --continue

9、重新push进行review



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值