Git版本管理 合并多次提交 git rebase的使用

有时候在一个分支的多次意义相近的 commit,会把整个提交历史搞得很混乱,此时可以将一部分的 commit 合并为一个 commit,以美化整个 commit 历史,可以使用 rebase 的方法来合并多次 commit。

举个例子。

这里有一个多次commit的git。

给三个文件(1,2,3)分别写入(‘1’,‘2’,‘3’)字符,然后分别commit,现在要把这三次commit合并。

操作过程如下:

:mkdir test
:cd test
:git init
已初始化空的 Git 仓库于 /Users/lurongming/test/test/.git/
:touch 1 2 3
:git add .
:git commit -m create
[master(根提交) bfebf58] create
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 1
 create mode 100644 2
 create mode 100644 3
:cat << EOF >> 1
> 1
> EOF
:git add 1
:git commit -m add 1
[master 175ff23] add
 1 file changed, 1 insertion(+)
:cat << EOF >> 2
> 2
> EOF
:git add 2
:git commit -m add 2
[master 08789b6] add
 1 file changed, 1 insertion(+)
:cat << EOF >> 3
> 3
> EOF
:git add 3
:git commit -m add 3
[master bb5bcd7] add
 1 file changed, 1 insertion(+)
:git log
commit bb5bcd734663a7e7b34c3d6f3b9a388d63a90091 (HEAD -> master)
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:39:22 2020 +0800

    add

commit 08789b6470ced99d990205ed04be89e71c259ce8
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:39:00 2020 +0800

    add

commit 175ff238a173e3fbe042fd55f7e2af8e3e0eedc5
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:38:05 2020 +0800

    add

commit bfebf5802c3bb482b0e50bb16fead4f48b1e25a1
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:37:39 2020 +0800

    create
:

把以上三次提交合并:

:git rebase -i HEAD~3

输入后进入如下界面:

pick 175ff23 add
pick 08789b6 add
pick bb5bcd7 add

# 变基 bfebf58..bb5bcd7 到 bfebf58(3 个提交)
#
# 命令:
# p, pick <提交> = 使用提交
# r, reword <提交> = 使用提交,但修改提交说明
# e, edit <提交> = 使用提交,进入 shell 以便进行提交修补
# s, squash <提交> = 使用提交,但融合到前一个提交
# f, fixup <提交> = 类似于 "squash",但丢弃提交说明日志
# x, exec <命令> = 使用 shell 运行命令(此行剩余部分)
# b, break = 在此处停止(使用 'git rebase --continue' 继续变基)
# d, drop <提交> = 删除提交
# l, label <label> = 为当前 HEAD 打上标记
# t, reset <label> = 重置 HEAD 到该标记
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       创建一个合并提交,并使用原始的合并提交说明(如果没有指定
# .       原始提交,使用注释部分的 oneline 作为提交说明)。使用
# .       -c <提交> 可以编辑提交说明。
#
# 可以对这些行重新排序,将从上至下执行。
#
# 如果您在这里删除一行,对应的提交将会丢失。
#
# 然而,如果您删除全部内容,变基操作将会终止。
#
# 注意空提交已被注释掉

上面的命令解释的很清楚了。

修改如下:

fixup 175ff23 add
fixup 08789b6 add
fixup bb5bcd7 add
:git rebase -i HEAD~3
error: 没有父提交的情况下不能 'fixup'
您可以用 'git rebase --edit-todo' 修正,然后执行 'git rebase --continue'。
或者您可以用 'git rebase --abort' 终止变基。
:git log
commit 5ffa955b7fe0b28299ab798554090d976c09d4b3 (HEAD)
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:50:54 2020 +0800

可以看到出现了问题,先使用git rebase --abort:

:git rebase --abort
:git log
commit 624b89728c3b7902f7e78cfc9c435e484bf34a95 (HEAD -> master)
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:51:32 2020 +0800

    add

commit e7946a1ac82c47f37e6095dfb53135481a8f9e1a
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:51:28 2020 +0800

    add

commit b4bc6e881b06cc4ad6ea572b0d0cb0ec937113ac
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:51:23 2020 +0800

    add

commit 5ffa955b7fe0b28299ab798554090d976c09d4b3
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:50:54 2020 +0800

    create

此时很晕,什么是父提交?

再修改:

:git rebase -i HEAD~3

修改如下:

pickup 175ff23 add
fixup 08789b6 add
fixup bb5bcd7 add

再看:

:git log
commit e03b44f5ba42c17f7beabe649c576916ae2840e6 (HEAD -> master)
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:51:23 2020 +0800

    add

commit 5ffa955b7fe0b28299ab798554090d976c09d4b3
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:50:54 2020 +0800

    create

看看add的提交内容:

:git show e03b44f5ba42c17f7beabe649c576916ae2840e6
commit e03b44f5ba42c17f7beabe649c576916ae2840e6 (HEAD -> master)
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:51:23 2020 +0800

    add

diff --git a/1 b/1
index e69de29..d00491f 100644
--- a/1
+++ b/1
@@ -0,0 +1 @@
+1
diff --git a/2 b/2
index e69de29..0cfbf08 100644
--- a/2
+++ b/2
@@ -0,0 +1 @@
+2
diff --git a/3 b/3
index e69de29..00750ed 100644
--- a/3
+++ b/3
@@ -0,0 +1 @@
+3

看着头晕,多写一点看看:

:cat << EOF > 1
> lurongming
> zhaolu
> EOF
:git add .
:git commit -m add 1
[master 2058905] add
 1 file changed, 2 insertions(+), 1 deletion(-)
:git log
commit 20589054a0e9285efb9edd91cda570a89e5c8e26 (HEAD -> master)
Author: zhao <[email protected]>
Date:   Tue Mar 10 04:37:27 2020 +0800

    add

commit e03b44f5ba42c17f7beabe649c576916ae2840e6
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:51:23 2020 +0800

    add

commit 5ffa955b7fe0b28299ab798554090d976c09d4b3
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:50:54 2020 +0800

    create

合并:

:git rebase -i 5ffa955b7fe0b28299ab798554090d976c09d4b3

改成:

pick e03b44f add
fixup 2058905 add

此时出入git log:

:git log
commit f6451e90cc766e296c601033f226fa676ab2872b (HEAD -> master)
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:51:23 2020 +0800

    add

commit 5ffa955b7fe0b28299ab798554090d976c09d4b3
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:50:54 2020 +0800

    create

查看提交有哪些内容:

:git show f6451e90cc766e296c601033f226fa676ab2872b
commit f6451e90cc766e296c601033f226fa676ab2872b (HEAD -> master)
Author: zhao <[email protected]>
Date:   Tue Mar 10 03:51:23 2020 +0800

    add

diff --git a/1 b/1
index e69de29..d1f7637 100644
--- a/1
+++ b/1
@@ -0,0 +1,2 @@
+lurongming
+zhaolu
diff --git a/2 b/2
index e69de29..0cfbf08 100644
--- a/2
+++ b/2
@@ -0,0 +1 @@
+2
diff --git a/3 b/3
index e69de29..00750ed 100644
--- a/3
+++ b/3
@@ -0,0 +1 @@
+3
发布了108 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/LU_ZHAO/article/details/104766133