type
status
date
slug
summary
tags
category
icon
password
在平时提交PR进行review的时候,有时候分支与master的commit提交历史差异较大,但是实际上文件的修改较小,就会导致reviewer非常confuse,为什么文件修改很小,但是commit历史非常多。为什么会产生这样的情况呢?
- 假设我们之前有一个分支B1,他有10个commit历史
- 当B1合并到master之后,master会将B1所有的修改squash为一个commit
- 如果我们有一个新分支B2是基于B1创建的,它自己有提交了commit X
- 当B2创建PR后,其与master对比的commit差异会有11个commit,我们期待只显示commit X即可
要将当前分支与master分支的所有差异合并为一个单独的commit,你可以使用以下方法:
方法一:使用交互式rebase和squash
- 首先确保你的工作目录是干净的(没有未提交的更改)
- 获取最新的master分支代码:
- 找出当前分支从master分叉的点:
- 开始交互式rebase:
- 在打开的编辑器中,保留第一个commit为"pick",将其余所有commit前的"pick"改为"squash"或"s"(这将把它们合并到第一个commit中)
- 保存并退出编辑器
- Git会提示你编辑新的合并commit的消息,完成后保存退出
方法二:使用reset和单个commit
- 确保工作目录是干净的
- 创建当前状态的临时备份:
- 重置到master分支:
- 将当前分支的所有更改作为一个新commit提交:
- 删除临时备份分支(可选):
方法三:使用cherry-pick
- 创建一个新的临时分支:
- 将原分支的所有更改cherry-pick到新分支:
- 删除原分支并重命名临时分支:
完成上述任一方法后,你的当前分支与master分支的差异将只包含一个commit。
- Author:Ximou Zhao
- URL:https://ximouzhao.com/article/20e4b0ac-588b-80a0-a9f4-e86ba8f0f33e
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!