参考git删除中途某一次commit
这种事情是不常遇到的,这里就是记录个变通方法,比如版本的提交如下,我要删掉commit-m这次的提交而保留后面的提交。
commit-n
commit-(n-1)
..
commit-(m+1)
commit-m
...
commit-1
commit-0
- 首先使用 git format-patch -(n-m) ,生成n-m个补丁文件 000(n-m)-commit-msg.patch,
000(n-m).patch是最后一次commit的补丁,
0001-commit-msg.patch是commit-m到commit-(m+1)的补丁。 - 使用git reset –hard commit-(m+1)退回到commit-(m+1)的版本,因为要删除commit-m,所以要在commit-(m-1)和commit-(m+1)之间做一次新的提交。
- 在 commit-(m+1)版本处使用git reset commit-(m-1),退回到 commit-(m-1)版本同时保留M+1版本的更改
- 由于回退时保留了修改,这里直接提交修改,
git add -u
git commit -m “从m-1到m+1的更改备注”,
提交后就回到了m+1的版本了 - 然后就是打补丁,提交修改
patch -p1 < 0001-commit-msg.patch
git add -u
git commit -m “commit-msg”
一级级的往后打补丁提交就好了,这是比较笨的办法,没办法啊,这种犯傻的事情也不多吧。
后记:
今天又记住了一个git命令
git format-patch -(n-m) 生成补丁,