提交关于git rebase的文档笔记
This commit is contained in:
@@ -0,0 +1,22 @@
|
|||||||
|
# Git Rebase
|
||||||
|
## Rebasing
|
||||||
|
git中,通常有两种方式将一个分支上的变动整合到另一个分支:merge和rebase。
|
||||||
|
- merge:将两个不同branch相对其最近公共祖先节点的修改进行merge操作,产生一个新的snapshot和commit
|
||||||
|
- rebase:将c3和c4相对最近公共祖先节点c2的修改进行rebase操作,将c4相对c2的修改应用到c3上。
|
||||||
|
|
||||||
|
### rebase细节
|
||||||
|
找到最近公共祖先节点,将当前节点相对公共祖先节点引入的变动保存到临时文件中,并且将当前branch的指针移动到想要rebase到的目标分支上,最后应用保存到临时文件中的变动。
|
||||||
|
### rebase和merge比较
|
||||||
|
rebase操作和merge操作最终产物是相同的,通过两种方式整合的分支最后都完全相同。但是相比较于merge,rebase操作产生的git log更加干净,其提交历史更像是一条直线,即使存在并行修改,在提交历史中也更像是串行提交的。
|
||||||
|
### rebase --onto
|
||||||
|
对于rebase操作,可以将branch 1相对于branch 1和branch 2公共祖先节点的变动rebase onto到branch 3上去。
|
||||||
|
```shell
|
||||||
|
# 将client相对于client和server公共先祖节点的修改应用到master分支上
|
||||||
|
git rebase --onto master server client
|
||||||
|
```
|
||||||
|
可以通过git rebase \<base-branch\> \<topic-branch\>命令来执行rebase操作,这样在执行rebase操作时无需先切换到topic-branch分支,该命令会切换到rebase分支并在base branch上执行replay操作。
|
||||||
|
## rebase操作的危险
|
||||||
|
不要对存在于本地库之外(远程仓库也存在)的提交进行rebase操作,如果对一个提交执行了rebase操作,并且其他开发者基于该提交进行了开发工作,这样会造成问题。
|
||||||
|
在git fetch远程分支之后,可以通过git rebase来代替git merge,从而保持提交历史的干净。
|
||||||
|
可以通过git pull --rebase来简化每次fetch后手动rebase的过程。
|
||||||
|
也可以设置git config --global pull.rebase true来默认在git pull时使用rebase。
|
||||||
|
|||||||
Reference in New Issue
Block a user