git操作之git rebase

Git Rebase 实战指南
本文介绍了 Git Rebase 的基本概念及其应用场景,包括如何将分支的提交信息线性合并到主分支,处理合并过程中的冲突,以及如何通过交互模式编辑提交信息。通过实际案例展示了 rebase 在实际工作中的应用。

git rebase可以简单的理解为调整commit信息,包括合并commit信息到master(与merge类似,但是效果不同)以及删除commit信息或者修改log信息等,下面分别介绍几种git rebase常用的场景。

合并commit信息到master

例如有如下commit信息并且当前处于topic分支:

      A---B---C topic
     /
D---E---F---G master

当我们执行:git rebase master 命令后,commit信息将会变为:

              A'--B'--C' topic
             /
D---E---F---G master

如果我们执行:git rebase topic master,则commit信息会变为:

      A'--B'--C' topic
     / 
D---E---A'---B'---C'---F---G master

上面两种情况相当于把commit信息合并到一起,而且是线性合并,这就是与merge不同的地方,如果使用git merge进行合并,则结果为:

      A---B---C      topic
     /          \
D---E---F---G ---H  master

多数情况下,当执行git rebase时,会出现conflict,此时,我们需要手动处理冲突,然后执行git add 把修改后的文件添加到暂存区,最后,如果想完成rebase,则执行git rebase –continue,如果不想,则执行git rebase –abort

使用交互模式编辑commit信息

使用git rebase -i 交互模式,你可以编辑commit信息,包括改变commit的顺序、删除某些commit、修改log信息等。使用方法为:git rebase -i ,例如:
执行git rebase -i HEAD~4,编辑器将会自动打开,显示最新的4个commit信息,以及一些操作命令,效果如下:

pick 9a54fd4 添加commit的说明
pick 0d4a808 添加pull的说明
pick d286baa The oneline of this commit
pick f1a5c00 The oneline of the next commit

# Rebase 326fc9f..0d4a808 onto d286baa
#
# 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
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

这些命令都很容易理解,比如你想修改0d4a808 commit的log信息,则把第二行的pick改为reword即可,然后保存退出,此时会再次打开一个编辑器,让你修改0d4a808 commit的log信息,修改后保存即可。

如果你想在0d4a808 和 d286baa 两个commit之间补上一个新的commit,可以使用edit替换第二行的pick然后保存,按照提示用git commit –amend添加一个新的commit,然后执行git rebase –continue即可。

如果你想删除9a54fd4和d286baa,则直接删了9a54fd4,并且把d286baa前面的命令改为fixup,意思就是删除本条commit。注意,不能直接把d286baa的记录删除,因为只有在前面没有commit的情况下才可以直接删除,效果如下:

(这里删除了   pick 9a54fd4 添加commit的说明)
pick 0d4a808 添加pull的说明
fixup d286baa The oneline of this commit
pick f1a5c00 The oneline of the next commit
### 如何进行Git Rebase操作 在多人协作环境中,`git rebase` 是一种用于更新本地分支的方法之一。通过变基可以将当前分支上的更改应用到另一个最新的分支上,从而保持线性的历史记录。 #### 执行Rebase操作 要执行一次简单的rebase操作,假设目标是让特性分支基于最新版本的主干分支: ```bash $ git checkout feature_branch # 切换至待处理的功能分支 $ git fetch origin # 获取远程仓库中的最新数据 $ git rebase origin/main # 将功能分支重新定位到main分支顶端 ``` 如果希望以交互方式完成上述过程,则可采用如下指令[^2]: ```bash $ git rebase -i HEAD~N # N代表想要追溯的历史数目 ``` 此时会打开一个文本编辑器显示最近几次提交的信息列表,在这里可以根据需求调整顺序、修改消息甚至删除某些条目后再继续变基流程。 #### 解决常见的Rebase错误 当遇到冲突或其他异常情况时,按照提示逐步解决问题即可恢复正常工作流;对于一些特定类型的失败情形有专门应对措施: - **未指明基础提交**:确认命令格式无误并提供完整的参数说明,比如 `git rebase target_branch_name` 或者利用交互模式 `-i` 参数来指定范围。 - **中途取消正在进行的操作**:可以通过运行 `git rebase --abort` 来安全地中止整个重进程而不影响原始状态[^4]。 - **已完成部分变更但无法继续前进**:先尝试解决所有现存文件级别的分歧再输入 `git add .` 添加已修正的内容最后用 `git rebase --continue` 命令恢复进度直至结束全部任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值