背景
前几天跟进值班的时候,和leader 以及同事们讨论起了代码问题,leader展示了kafka
的提交分支树,一条线下来,简洁明了;然后我们看了下,现有代码的提交记录,比较凌乱;于是思考了下leader所说的git rebase
功能简介
-
合并多个commit 为一个
git rebase -i [startpoint] [endpoint]
比如我们提交了多次的commit
对于整体功能而言可能 add 1 into a.txt
, add 2 into a.txt
, add 3 into a.txt
都属于一个大的功能 ,因此可以使用git rebase
将这三个commit
合并到一起
执行命令如下:
git rebase -i 7707086 e5d2446
注意startpoint
需要取到目标起点之前的一次commit
,因为该命令生效的是一个前开后闭的区间
会出现如下截图:
简单翻译一下:
# p, pick <commit> = 使用提交
# r, reword <commit> = 使用提交, 并编辑提交消息
# e, edit <commit> = 使用提交, 并停止进行修改
# s, squash <commit> = 使用提交, 合并到先前的提交中
# f, fixup <commit> = 类似"squash", 丢弃此提交的日志消息
# x, exec <command> = 使用shell运行命令(该行的其余部分)
# b, break = 在此处停止 (稍后继续使用'git rebase --continue'进行重新设置)
# d, drop <commit> = 移除提交
# l, label <label> =用名称标记当前HEAD
# t, reset <label> = 将HEAD重置为label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# 使用原始合并提交的消息创建合并提交(如果未指定原始合并提交,则使用单行代码)。 使用-c <commit>改写提交消息。
如果我们想要合并多个提交到一个commit
就可以
图三.png
图四.png
注意,此时我们在一个临时分支上
为了保持现有操作的结果,我们只需重新创建一个分支即可,git checkout -b new_branch
执行git log
就会发现,原来的3个提交,变为了一个 commit
-
保持整洁的线性merge提交记录
比如现有两个分支, dev
, master
,提交记录如下
dev
见上图一,
master
如下:
如果使用git merge
;然后使用用 git log
看看git log --graph --pretty=oneline --abbrev-commit
分支树自然就不是一条整洁的线性提交了
如果使用
git rebase
图八.png
然后切到
master
上merge dev
分支 然后查看git log
图九.png
此时的提交就是一个线性整洁的提交记录
网友评论