git将几个commit点合并成一个commit点

当用git时看到多个备注一样的commit时,就会想把它们合成一个,在这里记录一下方法

方法一

看一下当前分支的提交情况

1
git log

找到要合并的commitId的前一个commitId

这个commitId是要合并的commit后所形成的一个commitId需要跟着的commitId,这个commitId是不合并的,但这个commitId之后的commit是要合并的

开始合并

1
git rebase -i commitId

其中,-i 的参数是不需要合并的 commit 的 hash 值,这里指的是上文描述的commitId, 接着就进入到vi的编辑模式

进入vi模式后,在键盘上敲i键进入insert模式。这里面的东西的含义

1
2
pick 的意思是要会执行这个 commit
squash 的意思是这个 commit 会被合并到前一个commit

将第一行的pick保留,后面行的pick改为squash

修改完成后,按esc键,冒号,输入wq进行保存。之后会继续跳转到commit message 的编辑界面

注释中有之前的commit信息,现在需要合并这些信息成一个commit信息,将这些commit信息改成一个commit信息。

修改完成后然后就保存退出,跳回到最初的命令界面。

看到successfully的字样就说明成功了。可以git log再看一下commit情况,会发现commit记录已经合并了。

方法二

查看提交历史(最近10个)

1
git log -10

回到前面第十个commit,且将后面九个commit提交的内容状态改为未提交

1
git reset commitID(第十个commit的ID)

提交修改的内容

1
2
git add .
git commit -m "dev: 将前九个commit合并为一个"

总结

这两个方法都能达到合并多个commit的目的,但是方法一合并之后的commit时间是最初的commit的时间,如果想要合并后commit时间为最新的时间,可使用方法二
这两个的主要区别是方法一只是将commit信息合并了一下,而方法二是将head移到了之前的commit位置上,前面的commit信息被丢弃了,但修改的内容是保留了下来,这时在新提交一个commit就相当于将之前的commit信息合并了

提交到远程分支

按照上述两个方法中的一个合并commit后
这时提交到远程分支会报错,需要强制push
如果该分支上的代码仅你一个人在更新,可以强制执行本地代码覆盖远程代码操作:

1
git push -f origin change_branch
打赏

请我喝杯咖啡吧~

支付宝
微信