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
posted @ 2025-02-17 18:25  老禾的账本  阅读(16)  评论(0)    收藏  举报