zoukankan      html  css  js  c++  java
  • git rebase使用场景

    1. 当前分支落后拉取后,整理commit,使得提交历史为直线

    git pull = git fetch + git merge

    git pull --rebase = git fetch + git rebase

    其实--rebase的目的只有两个:

    1.让多个人在同一个分支开发的提交节点形成一条线,而不是多条线

    2.让你提交的commit在该分支的最前面

    当push被reject的时候,可以用 git pull --rebase 拉取内容,将提交记录保持一条直线

    git pull --rebase时候,不能有modified状态的文件,可以有Untracked files。modified状态的文件,可以commit或者stash一下,通常的操作有:

    $ git stash
    $ git pull --rebase
    $ git push
    $ git stash pop

    2. 别的分支合并到master,先整理为直线,再合并

    1. 开辟特性分支 git checkbox -b feature
    2. 在feature分支提交commit
    3. 在feature git reabse -i 合并多个commit为一个,简化提交历史。这样可以在git rebase时候减少冲突解决次数。
    4. 在feature git pull origin master --rebase (相当于git fetch origin master, git rebase origin/master)
                                                                        将master最新commit同步到此分支,可能要手动解决冲突(合并过程中,异常退出vi窗口,
                                                                        用git rebase --edit-todo恢复,修改完,git rebase --continue 继续下一步,
                                                                       忽略,git rebase --skip,终止,用git rebase —abort)
    5. 切回master,git merge feature 将feature分支内容合并到master
    6. git push提交master

    如此,master的提交历史将是一条直线。

    3. 分支的多个连续commit复制到其他分支

    git rebase [startpoint] [endpoint] --onto [branchName] //将多个连续commit添加到目标分支branchName, [startpoint] [endpoint]指定的是一个 前开后闭的区间

    例如:

    git rebase 90bc0045b^ 5de0da9f2 --onto master  //90bc0045b^后退一个commit,做成一个[90bc0045b, 5de0da9f2]闭区间

    rebase完后,此时HEAD处于游离状态,需要切换回目标分支,然后reset HEAD的位置

    git checkout master

    git reset --hard commitId //将分支的HEAD指向提交的id,切换回目标分支,会有提示,commitId使用提示中的最新id即可

    4. commit合并

    git rebase -i [startpoint] [endpoint] //[endpoint]可省略,将多个commit合并为一个,使用squash模式

    例如:

    git rebase -i HEAD~3 //往前3个commit,到现在,进行合并

    5. commit拆分

    git rebase -i 对指定commit的pick改为edit,进行编辑拆分

    6. commit排序

    git rebase -i 修改列表中commit顺序即可

    7. 改变分支起点

    git checkout feature2

    git rebase master

    可以将feature2起点从别的分支改到master分支上

    注意点:

    主分支上不能rebase,如果如此,主分支的历史将被篡改,不能看到原始的历史记录了

    git pull时可以加上--rebase参数, 使之不产生Merge点, 保证了代码的整洁,每次加rebase参数有点麻烦,

    给指定分支设置为rebase方式,可以使用如下方式:

     $ git config branch.dev.rebase true

    使用时将 "dev" 修改成您自己本地的分支名字,必须cd到工程目录下,才能更改分支配置

    所有的分支都应该用rebase

    $ git config --global branch.autosetuprebase always

    这样新建的分支会设置为rebase,已经建好的还需单独设置

  • 相关阅读:
    C#中Bitmap类实现对图像操作的一些方法
    C# GDI+ 文字操作
    C#中使用GDI+实现复杂打印
    【Python基础】json.dumps()和json.loads()、json.dump()和json.load()的区分
    【Python爬虫】selenium基础用法
    【Python爬虫】PyQuery解析库
    【Python爬虫】BeautifulSoup 解析库
    【Python爬虫】正则表达式与re模块
    【Python爬虫】Requests库的基本使用
    【Python基础】*args,**args的详细用法
  • 原文地址:https://www.cnblogs.com/mengff/p/11608864.html
Copyright © 2011-2022 走看看