zoukankan      html  css  js  c++  java
  • 操作实践,git本地分支执行rebase,让主干分支记录更简洁

    声明:迁移自本人CSDN博客https://blog.csdn.net/u013365635

    我们平时在写代码的时候,难免会修修改改,如果团队中每个人的代码提交记录都包含着一堆中间过程,是很不利于团队成员查看主干分支的代码提交记录的。
    下面就是一个不好的例子,本地pull主干分支后,肯定希望看到的是特性开发、问题修改的记录,而不是这样一堆的中间过程。
    这里写图片描述
    解决这个问题,一种可行的做法是先在本地分支上执行rebase操作再push到远程个人分支,然后再执行合并到主干分支的Merge Request。
    下面的远程分支操作基于iSource,比如,现在往远程个人分支push了3次本地分支修改,远程个人分支往主干Merge前,提示有如下commit信息。
    这里写图片描述
    现在的目的就是在Merge到主干前将这些commit rebase为一个提交记录。
    本地仓库分支rebase具体操作如下。
    step1:testRebase1、testRebase2、testRebase3是本地最新的3个commit,故可执行
    git rebase -i HEAD~3
    进入如下界面
    这里写图片描述

    step2:根据自己的需要合并和修改这些commit。修改和保存这个界面的文本信息的过程与vi操作类似,比如执行get rebase -i HEAD~3后进入的是命令模式,点击按键 i 进入编辑模式,此时可以对内容进行修改,修改完后点击按键 Esc 退出编辑模式进入命令模式,命令行模式下输入 “:” 进入末行模式,在末行模式下输入wq回车即可保存修改。
    这里写图片描述

    保存后自动进入commit message编辑界面
    这里写图片描述

    编辑为自己需要的message,如下图示例
    这里写图片描述

    再次退出保存,无误的话,git shell界面提示如下信息
    这里写图片描述

    再次将本地分支push到远程非人分支,远程个人分支往主干Merge前,就只提示一条commit记录了,如下图。
    这里写图片描述

    本地查看日志记录,结果如下。可以看到以前的3条中间过程的commit信息已经没了,剩下的是1条合并后的信息。
    这里写图片描述

    后记:
    本地分支的rebase操作要求分支是纯净的,即不能有未提交的代码,但是实际操作中肯定会出现一些代码修改了但是现在还不想提交的,所以如果每次都要执行下git stash save/git stash pop操作。理论上完全可以在远程个人分支上执行rebase操作,避免本地分支频繁的get stash操作, 因为远程分支一般都是我们从个人分支push上去的,不会有未提交的修改这类问题,且理论上远程分支和本地分支地位是对等的。然而,实际中很多系统不允许执行远程分支的rebase操作,比如本文作者在实际工作中遇到的就是这种情况,所以还是按部就班在本地执行rebase再push到远程个人分支吧。
    如果不习惯使用git shell,git GUI界面也可以完成这些操作,道理都是一样的。

  • 相关阅读:
    JAVA类型转换的那些坑儿
    记录一次 ajaxSubmit()提交表单
    遍历Map
    整理JS对数组的内置操作函数(转)
    html页面监听事件(转)
    js控制文本框只能输入中文、英文、数字与指定特殊符号(引用)
    target属性 和 重定向 response.sendRedirect("");
    js各种正则表达式(引用)
    前端---js定义函数的方式
    Web Service 根据wsdl调用代码
  • 原文地址:https://www.cnblogs.com/xsl-thumb-rfcs/p/9941603.html
Copyright © 2011-2022 走看看