6.git rebase
应用场景:
1)合并多次提交信息:
A.在一个版本库中提交了三此commit:
提交三次commit
B.合并三次commit提交:
git rebase -i HEAD~2 ---------> 将第三次commit前面的pick修改为squash
合并commit
补充信息:
1.如果对话框意外退出了,使用该命令再次操作:git rebase --edit-todo
* pick:正常选中
* reword:选中,并且修改提交信息;
* edit:选中,rebase时会暂停,允许你修改这个commit
* squash:选中,会将当前commit与上一个commit合并
* fixup:与squash相同,但不会保存当前commit的提交信息
* exec:执行其他shell命令
C.返回信息:
返回信息
D.git log 信息:
git log 信息
2.分支合并:
1.从master分支切除一个开发版本feature ---------> git checkout -b feature
当前分支图1
2.这时候,另一个开发同事完成了一次线上bug恢复,并合并到master分支上,此时master分支是领先feature分支的:
当前分支图2
3.恰巧此时,feature开发完毕,需要合并到master分支.-----------> git merge master
当前分支图3
其中黄色master就是最终合并后的样子.但是查看log时候,会发现commit信息不是在一条直线上,出现分叉了.
4.如果想要记录保持直行,可以使用git rebase,此时我们会退到前面的第二步中再做操作
git rebase之前
5.使用rebase后的结果:
git rebase之后
git rebase具体是怎么操作的:
1)git 会把 feature 分支里面的每个 commit 取消掉;
2)把上面的操作临时保存成 patch 文件,存在 .git/rebase 目录下;
3)把 feature 分支更新到最新的 master 分支;
4)把上面保存的 patch 文件应用到 feature 分支上;
使用git rebase产生的影响:
从 commit 记录我们可以看出来,feature1 分支是基于 hotfix 合并后的 master ,自然而然的成为了最领先的分支.
6.在 rebase 的过程中,也许会出现冲突 conflict。在这种情况,git 会停止 rebase 并会让你去解决冲突。在解决完冲突后,用 git add 命令去更新这些内容.
注意,你无需执行 git-commit,只要执行 git rebase-continue,这样 git 会继续应用余下的 patch 补丁文件
7.在任何时候,我们都可以用 --abort 参数来终止 rebase 的行动,并且分支会回到 rebase 开始前的状态。
git rebase --abort












网友评论