[Git] Git整理(四) git rebase 的使用

本文详细介绍了Git的git rebase命令,包括其与git merge的区别,变基原理,以及如何使用git rebase -i进行交互式变基,如修改提交信息、重新排序、压缩和拆分提交等。同时,文章也提醒了在已发布分支上使用rebase的风险。
摘要由CSDN通过智能技术生成

概述

在之前总结分支相关内容时说道,合并两个分支的提交可以使用git merge,然而除了这种方式之外,还有一种方式就是使用git rebase,这两种方式的最终结果都相同,但是合并历史却不同;git merge是将两个分支做一个三方合并(如果不是直接上游分支),这样一来,查看提交历史记录,可能会显得非常凌乱。git rebase则会将当前分支相对于基低分支的所有提交生成一系列补丁,然后放到基底分支的顶端,从而使得提交记录变称一条直线,非常整洁。

git merge 和 git rebase 区别

假设现在本地仓库中有两个分支:master分支和branch1分支,提交历史用图来表示如下:
这里写图片描述
现在要合并branch1到master分支,如果使用git merge则执行如下命令:

$ git checkout master
$ git merge branch1

合并后查看提交历史如下:

$ git log --graph --pretty="oneline"
*   fe8799e0aec30e388306883960b4cf438d3f1ec4 Merge branch 'branch1'
|\  
| * cf31255da6e84acc6f6840e3ceb0fd3129e2d73e UserA commit 3--branch1
| * 5c2d1c938f8e5f98dccaa0a5ab6222bd6b1cd75d UserA commit 2--branch1
* | 284aa3eb6c405411584d682a1387118fe92e4821 Usera commit master
* | 967fca58deb914ad1cda9ff84291fd946045207d Usera commit master
|/  
* d989fc50530918b3b7b0ed68b31d6751c2302875 UserA commit 1

使用图来表示,本地仓库提交历史如下:
这里写图片描述

现在我们使用git rebase合并原来的master分支和branch1分支,假设当前分支为branch1,基地分支为master:

$ git checkout branch1
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: UserA commit 2--branch1
Applying: UserA commit 3--branch1
Applying: Usera commit master
Applying: Usera commit master

合并后查看提交历史如下:

$ git log --graph --pretty="oneline"
* 6cf95c391ba7d43d0f5d95300130a43816af82c8 Usera commit master
* 63def8a8740b9b3c9f6c09ae49ba72faa9446cf6 Usera commit master
* 33049864f83a686bff9b2a2d8626427653a16f22 UserA commit 3--branch1
* 14ac1cac7357ccf35581c89e099793260264d3ea UserA commit 2--branch1
* d989fc50530918b3b7b0ed68b31d6751c2302875 UserA commit 1

使用图来表示,本地仓库提交历史如下:
这里写图片描述
可以看到,现在branch1分支上相对于master分支的提交,提交到了master分支的顶端,如此一来整个提交记录保持在一条直线上。这就是git rebase

rebase原理

git rebase <branch>的原理是:找到两个分支最近的共同祖先,根据当前分支(上例中branch1)的提交历史生成一系列补丁文件,然后以基地分支最后一个提交为新的提交起始点,应用之前生成的补丁文件,最后形成一个新的合并提交。从而使得变基分支成为基地分支的直接下游。rebase一般被翻译为变基。

branch1分支完成变基后,直接变成了master分支的下游了,这时切换到mas

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值