美文网首页
说一说git rebase

说一说git rebase

作者: 逆小苍 | 来源:发表于2020-08-31 15:29 被阅读0次

    背景

    前几天跟进值班的时候,和leader 以及同事们讨论起了代码问题,leader展示了kafka的提交分支树,一条线下来,简洁明了;然后我们看了下,现有代码的提交记录,比较凌乱;于是思考了下leader所说的git rebase

    功能简介

    • 合并多个commit 为一个

    git rebase -i  [startpoint]  [endpoint]
    

    比如我们提交了多次的commit

    图一.png

    对于整体功能而言可能 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,因为该命令生效的是一个前开后闭的区间
    会出现如下截图:

    图二.png
    简单翻译一下:
    # 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

    图五.png
    • 保持整洁的线性merge提交记录

    比如现有两个分支, dev, master,提交记录如下
    dev见上图一,
    master如下:

    图六.png

    如果使用git merge;然后使用用 git log看看git log --graph --pretty=oneline --abbrev-commit

    图七.png
    分支树自然就不是一条整洁的线性提交了
    如果使用git rebase
    图八.png
    然后切到mastermerge dev分支 然后查看git log
    图九.png
    此时的提交就是一个线性整洁的提交记录

    相关文章

      网友评论

          本文标题:说一说git rebase

          本文链接:https://www.haomeiwen.com/subject/eteusktx.html