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,已经建好的还需单独设置

  • 相关阅读:
    Vue学习路线
    国庆游
    Axure RP 9 Beta 开放下载(更新激活密钥和汉化包)
    python虚拟环境
    异步任务神器 Celery-入门
    pymysql操作mysql
    安装 RabbitMQ
    GIT工作流
    flask入门与发送邮件与QQ邮箱
    Mysql第一周
  • 原文地址:https://www.cnblogs.com/mengff/p/11608864.html
Copyright © 2011-2022 走看看