git合并多次提交记录

本文详细介绍了如何使用git rebase命令,通过vi编辑器模式将多个提交合并成逻辑清晰的功能块,以提升提交历史的整洁度。涉及的操作包括调整提交顺序、使用fixup合并、并行提交的整理和推送至远程仓库。
摘要由CSDN通过智能技术生成

命令

git rebase -i HEAD~4

或者

git rebase -i bddesdd6 #要合并的提交的上一条提交ID

合并(vi编辑器模式)

pick bddebfb1 退出修改
f 68326b8c 接口修改
f 699501f7 接口修改
f 784e86b3 接口修改

# Rebase 2b8d14b7..784e86b3 onto 784e86b3 (4 commands)
#
# Commands:
# p, pick <commit> = use commit
......

主要看这里的合并方式
根据描述 用f(fixup) (使用这个提交,但合并到前一个提交,并且忽略备注)

# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]
# .       create a merge commit using the original merge commit's
# .       message (or the oneline, if no original merge commit was

如果中途发生异常,比如还没完成关闭了终端,可随时中断重新rebase

git rebase --abort

同步到远程(确保此分支没有别的提交或者只有你在用)

git push origin branchName -f

 

=====================[Git]合并多次提交=============================== 

1 问题提出

很多时候,很难作到一次提交能够完整地解决一个功能,经常性出现以下情况:
为了完成2个功能,一共进行了5次提交,按照时间先后顺序分别为m1,m2,m3,m4,m5其中:
m1 对应 功能1的A模块;
m2 对应 功能1的B模块;
m3 对应 功能2的A模块;
m4 对应 功能1的C模块;
m5 对应 功能2的B模块;
如图所示:

 

1.png

如果能把提交m1,m2,m4合并成一次提交,然后提交日志改为"[功能1] 模块A,模块B,模块C"
把提交m3和m5,合并成一次提交,然后日志改为"[功能2]模块A,模块B"
就会显得更加整洁和优雅;

让我们来看看如何实现这个功能吧.

2 查看提交记录

"$ git log --oneline -5"用比较简洁的方式查看最近提交的5次日志:
1,git log命令可以查看提交的历史记录;
2,--oneline参数,commitid只显示前面7位,然后加上提交日志;
3,-n 参数,查看最近的n次提交的信息;

 

2.png

3 调整最近5次的提交

$ git rebase -i HEAD~5
该命令表示调整最近5次的提交
当输入该命令后,需要编辑一个文本文件,来指导git如何调整;
git首先会给出一个默认的模板给我们,模板如下:

 

3.png

 

红色部分,代表着当前5次提交的情况,表示按照提交顺序从前到后,分别是m1,m2,m3,m4,m5;
这个和我们的实际情况是一样的.
所以如果我们直接输入wq保存提交,什么都不会改变;

按照我们的需求,需要调整文本为这个样子:

 

4.png

pick 90094e0,表示使用m1这次提交;
squash 23009f9,表示将m2这次提交合并到上一次pick的提交,即m1;
squash 52647ed,表示将m4这次提交合并到上一次pick的提交,即m1;
pick 463bf9a,表示使用m3这次提交;
squash 890f916,表示将m5这次提交合并到上一次pick的提交,即m3;

进入底行模式,输入wq保存退出后,git将按照这个脚本执行调整命令;
当使用m1,合并m2,m4之后,提示输入第一次pick的的日志,会先分别显示这3次提交的日志:

 

5.png

我们更改为:

 

6.png

再次输入wq,保存退出,提示输入第二次pick的日志,我们直接输入

 

7.png

然后再次wq保存退出,提示编辑成功.

然后,我们在sourcetree上查看效果:

 

8.png

origin/master分支上,有5次提交,杂乱无章;
master分支上,现在只有2次提交,干净漂亮有没有;

4 改动推送到origin

使用 '$ git push -f'命令,将改动强行推送到远程仓库;



作者:BinaryBang
链接:https://www.jianshu.com/p/53a7e3930fdd
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值