git合并多次commit
需求目的
在开发的时候,因为是直接向develop分支进行合并,在每次迭代之后,创建merge request合并请求,同事进行code review后会通过检查,然后合并至develop;
但是每个迭代提交的commit都比较多,直接合并到develop,像一些 “修改xxx参数、删除console、添加测试代码”,等等一些提交都会提交至log日志里面,这个时候可以进行合并或者删除;
干货篇
比较啰嗦,从头开始…
先建好master之后,创建一个 test-merge-commit 的一个测试分支,用来模仿开发分支,进行第一次提交然后推送远程;
ps:g cm “xxx” 这个是我设置了快捷命令,有需要的小伙伴可以自行百度下,g是git的缩写,这个不需要设置,git自带的
提交了三次:
**开始合并:**执行:git rebase -i head~n(这里的n是要向前合并几个提交)
选择 pick 操作,git会应用这个补丁,以同样的提交信息(commit message)保存提交
选择 reword 操作,git会应用这个补丁,但需要重新编辑提交信息
选择 edit 操作,git会应用这个补丁,但会因为amending而终止
选择 squash 操作,git会应用这个补丁,但会与之前的提交合并
选择 fixup 操作,git会应用这个补丁,但会丢掉提交日志
选择 exec 操作,git会在shell中运行这个命令
一般会使用 p 和 s就可以了!!
:wq 保存就可以了
接下来会出现这一步,比较重要!!!!
引用一位小伙伴的话:
继续 :wq 保存
保存完后注意看,提交从三个变成两个了;
还有一步比较重要的!!
注意,这个时候本地合并完成以后,远端的提交记录里面还没有变,这个时候 git push 的话会提示远端有更新,需要git pull,
但是!!!不要pull!!
这个时候需要用本地去覆盖掉远端的提交,执行 git push -f
注意看!这是强推之前的提交记录, 3 次!!
开始强推!
强推之后
大功告成!
换一种比较简单的方法
分支问题,需要多个commit合并为一个commit:
develop: git pull -r
develop: git checkout current-branch
current-branch: git merge develop
current-branch: git checkout -b test-merge-branch(这一步是为了在本地保留一份备份,防止出现问题)
test-merge-branch: git reset origin/develop(执行完这条命令后会让重新提交)
test-merge-branch: git cm “重新提交即可,如果没问题,可以切回之前分支,重复此步骤”