git rebase和git merge的区别
假设仓库存在两个分支,分支一为:
commit 93ed75d2a12a543e44ae28a2393f91182d636677 (HEAD -> master)
77
commit c3048bbbac57e642d1ff49a87048a45b62e687c1
666
commit fc3e9736a08ea70a2afe41a8f3598602d6b28830
555
commit 43b5f3281c3cc8c69e551b543db998e48827a448
2
commit 13ac2c890bad3f789fff71b09b4cfe4d060db8a3
1
分支二为:
commit f8ba7ce71b09477a1d5973e900cd57588e5b1057 (HEAD -> 333)
444
commit 55b51798af935682707a076528a6f56bae3dc17e
333
commit 43b5f3281c3cc8c69e551b543db998e48827a448 (master)
2
commit 13ac2c890bad3f789fff71b09b4cfe4d060db8a3
1
两者从提交2处分离。
git merge
站在分支一中执行:
git merge 分支二
执行后分支一的log
commit 7d9253553075ce022dfc166daa52afda2ebfde47 (HEAD -> master)
Merge: 93ed75d f8ba7ce
Merge branch '分支二
commit 93ed75d2a12a543e44ae28a2393f91182d636677
77
commit c3048bbbac57e642d1ff49a87048a45b62e687c1
666
commit fc3e9736a08ea70a2afe41a8f3598602d6b28830
555
commit f8ba7ce71b09477a1d5973e900cd57588e5b1057 (333)
444
commit 55b51798af935682707a076528a6f56bae3dc17e
333
commit 43b5f3281c3cc8c69e551b543db998e48827a448
2
commit 13ac2c890bad3f789fff71b09b4cfe4d060db8a3
1
cat 1 显示提交内容如下:(因为是merge分支二,不一样部分自己的先出现,然后是===分割线,别人的。)
1111
2222
5555
6666
7777
3333
4444
git rebase
站在分支一上执行
git rebase 分支二
不同于merge能够保留住两个分支的改动,rebase会依次地把每条提交做diff,当遇到一个提交冲突时,它的diff如下(因为还没到最后一条提交,diff的内容只是当时提交内容的diff):
1111
2222
<<<<<<< HEAD
3333
4444
=======
5555
>>>>>>> fc3e973 (555)
解决完冲突之后执行
git rebase --continue
在看log:
commit d2c753ea7756193996805e59438a9f8fcaf5d240 (HEAD -> master)
77
commit 75bcd59a730bc91abb9f79ba486c5f3b2de85a86
666
commit 0dceb5cf48781557b69186d951298ad9b7cc7120
555
commit f8ba7ce71b09477a1d5973e900cd57588e5b1057 (333)
444
commit 55b51798af935682707a076528a6f56bae3dc17e
333
commit 43b5f3281c3cc8c69e551b543db998e48827a448
2
commit 13ac2c890bad3f789fff71b09b4cfe4d060db8a3
1
文件内容:
cat 1
1111
2222
3333
4444
5555
6666
7777
浙公网安备 33010602011771号