以master为准创建分支dev_A 开发,开发过程中,master主分支有新的功能被提交进来,需要将这部分代码align到dev_A的版本.
这里仅列举这一个场景,rebase 还可以修改commit message 请参照我的另一篇文章
理解rebase
rebase 字典翻译为变基。我的理解是:改变基准,以早期的master为基准创建的dev_A,后来master代码有变,我们需要重新以最新的master为基准同步代码,可以理解成改变dev_A的基准版本为最新的master,这样是不是好理解一些呢?
1 git切换至当前开发版本
git checkout dev_A
切换到当前开发版本是,也就是 dev_A
2 list需要变基到的branch,不一定是master
git branch -a
查看所有分支,根据列表中的branch 基准branch
3 执行rebase变基
git rebase master
这里以master为基准,如果是其他版本,git rebase branchname
如果dev_A中存在没有提交的代码,git会提示:
can't rebase : you have unstaged changes.
Please stash or commit them .
可以根据自己的情况选择执行stash 或者 commit,这里stash为例:
git stash
stash暂存本地仓库,rebase 完成之后再使用 git stash pop 取回这一部分代码。
如果没有冲突的情况
比如dev_A做的是A模块,master 代码变更进去的是B模块,也假设没有其他共同使用的文件
git rebase master 这一句命令就已经完成了我们的rebase操作,我们dev_A 已经包含了master后来更新进去的文件。
存在冲突的情况
这里我们着重说明存在冲突的情况
git 会提示我们有哪些文件冲突,我们可以在代码编辑器中查看冲突标识符
HEADcode
=======
Othercode
两个冲突的版本用连续的等号=隔开,便于对比两个版本代码,手动修改使用哪个版本的代码。
标记冲突已解决
git add .
修改完成之后 使用git add . 告诉git 冲突已被全部解决,也可以一个文件一个文件解决之后使用 git add filepath, 这样比较麻烦
继续rebase 操作
git rebase --continue
提交到远程分支
git pull -f
master的代码已经被同步到当前本版dev_A的版本库了。
如果有stash的文件,使用如下命令取回代码
git stash pop