Git rebase使用

Git rebase使用

  • 背景

    在项目开发中,我们常常需要修改已经提交的记录。git rebase的功能不仅在于合并分支,还可以重写历史提交,修改提交顺序,删除某一笔提交,修改提交信息,合并提交,以下内容是我参考git book中的内容和自己工作时的经验。

1. 合并分支

  • 合并分支,变基

    使用rebase来进行合并分支,在CSDN中有非常多的文章的来讲解,包括和merge之间的差异,在这里就不过多讲解了。在实际开发过程中,使用git rebase进行合并分支,是比较常见的,尤其是在提交MR之前,我们会检查我们的开发分支是否是基于主干最新的提交,如果是,那么git rebase和git merge效果一样,如果此时主干分支已经有新的提交,我们就可以使用git rebase将我们的开发分支基点变更到主干最新提交上,当然这里可能会有冲突,和merge方式一样去解决冲突,合并即可。

2. 修改commit历史

  • 合并本地commit

    在开发过程中,我们往往会有多笔提交,多笔提交只是一个需求,但是我们已经提交多个commit记录,这时我们可以进行合并提交记录,有两种方式进行合并

    • 使用git reset再重新提交

      # 将提交记录重置到初始
      git reset commit-id --soft
      
      # 重新提交
      git add .
      git commit -s
      

      使用git reset --soft 可以保留工作区的内容,将版本库中的commit记录给重置到指定的commit-id,然后再进行提交修改。使用reset会把分支的commit记录给清楚,建议将操作分支备份,不然有丢失修改的风险。

    • 使用git rebase进行合并分支

      # 合并最近三笔提交
      git rebase -i HEAD~3
      
      # 将commit-id前的 pick 改为 fixup或者squash ,或者使用简写 f 和 s
      # 使用fixup会丢弃commit信息,使用squash会保留commit信息
      
  • 更改commit提交信息

    如果是最近的一笔提交的话,我们可以使用git commit --amend来进行修改commit信息,但是如果是再靠前的commit提交就无法更改了,这时可是使用rebase。

    git rebase -i HEAD~5
    
    # 将commit-id前的 pick 改为 reword 或者 r,进行修改
    
  • 修改某一笔commit,或者在某笔提交后新增提交

    在变基信息的表中,将pick修改为edit,就会让rebase停止在这笔提交上,使用git commit --amend进行修改提交,即可修改提交

    使用git commit 就会在这笔提交后新增一笔提交

  • 删除某一笔commit

    在变基信息的表中,将pick修改为drop,可以删除这笔提交记录

  • 修改提交顺序

    在变基信息的表中的commit行进行调整,可以改变提交顺序

  • 去除merge节点

    使用git merge后会生成一个merge节点,有时不想要这个merge节点可以使用git rebase去掉

     # 如果merge 时没有冲突,可以直接将merge节点去除
     git rebase -i HEAD~1
    

3. 总结

  • 在git book中提到

    Git 并不会尝试过于聪明的合并冲突解决方案,Git 的哲学是聪明地决定无歧义的合并方案

    所以,git中的冲突非常普遍,而git中有一些非常不错的工具来帮助我们进行版本管理,git rebase就是一个非常强大的工具,不仅可以进行变基,去除多余的合并分支,实现简化合并流程的效果,也能够变动历史提交记录,让我对历史上的某笔提交进行修正或者删除。

4. 参考

Git - 重写历史

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值