zoukankan      html  css  js  c++  java
  • git rebase 合并历史提交的多个分支

    今天因为在自己分支上提交了多个commits,合入master时被cr的同事叼了一顿:一个功能模块不要提交太多commits,导致master主线混乱。所以研究了一下如何合并多个历史提交的commits。

    根据关键字搜了一下找到几篇文章,都将答案指向了git rebase -i 命令,接下来在测试的分支上实践一番:

    1.git log 查看提交历史

    可以看到有三次历史记录,分别是"a", "b", "c"

    2.git rebase -i (from, to]

    from和to分别是commits的hash值,即从from commit到to commit之间的commits(不包含from)都将被合并。这里我们要合并a->c之间的3个提交,那么输入:

    git rebase -i 5c400f38b9d64c73fd173749c483433b471e64f8 ba5bb072f43de6e5e227861a9862e8793af6eaa5

    可以看到提示:

    p, pick <提交> = 使用提交
    r, reword <提交> = 使用提交,但修改提交说明
    e, edit <提交> = 使用提交,进入 shell 以便进行提交修补
    s, squash <提交> = 使用提交,但融合到前一个提交
    f, fixup <提交> = 类似于 "squash",但丢弃提交说明日志
    x, exec <命令> = 使用 shell 运行命令(此行剩余部分)
    b, break = 在此处停止(使用 'git rebase --continue' 继续变基)
    d, drop <提交> = 删除提交
    l, label

    这里我们主要使用"pick"和"squash"来分别选择保留和丢弃提交日志。

    然后保存vim后弹出下一个编辑框:

    编辑合并的提交日志:

    保存后,再次查看git log:

    可以看到三次commits已经合并完成。

    3.合并到原分支

    因为rebase 后在一个临时分支上,可以直接push -f 推到远端。

    `
    git push -f origin xx

    `

    即可覆盖远端的历史commits。

  • 相关阅读:
    幂等性-接口安全性
    spring 事务
    Disruptor 并发框架
    java中锁的应用
    线程池原理
    并发队列阻塞式与非阻塞式的区别
    Swagger UI教程 API 文档神器 搭配Node使用
    linux ssh_config和sshd_config配置文件
    Linux中iptables设置详细
    Linux(Centos)之安装Redis及注意事项
  • 原文地址:https://www.cnblogs.com/puyangsky/p/13847821.html
Copyright © 2011-2022 走看看