Git rebase 合并多次commit及可能遇到的问题

不论是在使用Git或者SVN的过程中,我们都难免遇到出现多次的commit。而导致在Chery Pick到其它分支的时候遗忘掉,或者是带来了其他不必要的麻烦。那么,有办法解决这些多次类似的commit提交记录么?

答案当然是有的。在Git中可以将多个提交记录合并成一个记录。只需使用 git rebase -i SHA-1前6位(需要合并到该记录的前一个hash值)或者是Head~合并的总条数。

例如:总共有3次相同功能模块的提交记录(例子全为手动,懒癌发作)。

1.

commit 8d384922678....

Author: admin <admin@admin.com>

Date: Mon Mar 5 11:27:32 2018 +0800

Hello功能完善

2.

commit 98d2b46f44e6....

Author: admin <admin@admin.com>

Date: Mon Mar 5 11:25:32 2018 +0800

Hello功能 bug修复

3.

commit a12wxs1268ee....

Author: admin <admin@admin.com>

Date: Mon Mar 5 11:23:32 2018 +0800

新增Hello功能

4.

commit b7e419e2e1f8d....

Author: admin <admin@admin.com>

Date: Mon Mar 5 11:21:32 2018 +0800

*** bug修复(这个提交记录是跟前面的 Hello功能记录不相关的)

其中1,2,3为相同功能的提交记录,所以想将这三条记录合并成一个记录即  使用命令 

git rebase -i b7e419(这里需要填写合并到该记录的前一条SHA-1值)

之后便出现如下界面(下面所列出来的顺序跟git log上是相反的。最上面的是最早提交的):

pick  a12wxs1  新增Hello功能

pick  98d2b46  Hello功能 bug修复

pick  8d38492  Hello功能完善

还有一些带#加一大串的是,注释所用。在这里面,我们只需用到 squash 和 pick。这两个的意思分别是:

squash,提交记录,合并到前一个记录。pick,提交记录。

所以我们想将 98d2b46和8d38492都合并到a12wxs1中,只需将 98d2b46和8d38492 前面的pick 改成 squash或者s即刻。

之后,便可以按Esc键退出,并敲上:wq保存退出。等待几秒,进入下一个界面。

# This is a Combination of 2 Commits

# The first commit's message is:

新增Hello功能

# This is the 2nd commit message:

Hello功能 bug修复

# This is the 3rd commit message:

Hello功能完善

这是要合并的三条记录,你可以保留最上面到 新增Hello功能.将剩余的4行提示信息删除。这样就只保留了一条信息。

同上面,按Esc,并输入:wq 回车即可。这时候就开始合并。如果在合并过程中出现类似问题:

git rebase -i resumeerror: could not apply 8d38492  ... Hello功能完善 When you have resolved this problem, run "git rebase --continue".If you prefer to skip this patch, run "git rebase --skip" instead.To check out the original branch and stop rebasing, run "git rebase --abort".Could not apply 8d38492  ... Hello功能完善。

使用git status查看当前哪几个文件冲突。然后,解决冲突。再次git add file(文件路径,包含冲突文件和已合并文件),都add完成后,在git commit 即可。 之后便可以使用git rebase --continue继续合并。直到合并成功。合并成功后push到远端即可。

这里要注意的是:

当在1.2.3这三条记录中,插入了其他的提交记录。这时候,你需要将它们的位置调整下。再进行上面的步骤。例如:在1和2之间插入了一条其他的提交记录

1.

commit 8d384922678....

Author: admin <admin@admin.com>

Date: Mon Mar 5 11:27:32 2018 +0800

Hello功能完善


其他.

commit a25w2za6ge2....

Author: admin <admin@admin.com>

Date: Mon Mar 5 11:26:32 2018 +0800

新增***功能

2.

commit 98d2b46f44e6....

Author: admin <admin@admin.com>

Date: Mon Mar 5 11:25:32 2018 +0800

Hello功能 bug修复

在使用git rebase -i b7e419后,如下界面:

pick  a12wxs1  新增Hello功能

pick  98d2b46  Hello功能 bug修复

pick  a25w2za 新增***功能

pick  8d38492  Hello功能完善

再进行合并的时候,只需将 a25w2za 和 8d38492  位置互调。如下即可。

pick  a12wxs1  新增Hello功能

s 98d2b46  Hello功能 bug修复

s 8d38492  Hello功能完善

pick  a25w2za 新增***功能

其他步骤如上面所述。至此,合并大功告成。

O(∩_∩)O哈哈~

注意:

上面说到的push,要强制push。不然会出现多个重复的提交记录。因为我是在主分支上进行操作的。所以需要强制push。







  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值