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完后,需要

git reset --hard commitId //将分支的HEAD指向提交的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,已经建好的还需单独设置

参考:

https://baijiahao.baidu.com/s?id=1633418495146592435&wfr=spider&for=pc
https://www.liaoxuefeng.com/wiki/896043488029600/1216289527823648
https://blog.csdn.net/nrsc272420199/article/details/85555911
https://www.codercto.com/a/45325.html

05-25 17:54