以下操作均属高危搞作,请谨慎使用
一、移除错误的push(操作一旦完成无法恢复)
1、查询想要回退的commit-id, 一般选择出错commit的前一个commit-id,并复制下来
git log
2、切换到对应的commit
git reset --hard <commit-id>
3、强制提交代码
git push -f
总结:这个方法,适用于push了一份错误的代码,且没有其他人在这份错误代码的基础上进行开发,切换到对应的commit后,强制提交,会将切换对应commit之前的全部commit覆盖。
二、移除错误的push(可恢复)
1、查询想要回退的commit-id, 一般选择出错commit的前一个commit-id,并复制下来
git log
2、切换到对应的commit
git reset --soft <commit-id>
3、将本地的错误代码暂存
git stash
4、强制提交
git push -f
5、在本地恢复错误的代码
git stash pop
总结:这种方式流程多了一步暂存,可以将错误的代码暂存起来,然后将没有问题的代码强制提交到对应分支。 回过头来,再选择是否需要再本地恢复错误的代码,如果不想恢复,可以执行git stash clear将暂存的代码清空,如果想改改错误的代码再提交,就可以执行git stash pop。然后继续push。这个操作和上一个操作基本一样,只能切换到某次commit,并覆盖掉之前的全部commit
三、移除错误的push(中间某次commit)
解释:在某个分支,你提交了一次错误代码之后,自己或是有其他人在你的这次错误之后又提交了部分代码。
1、查询出错commit-id,并复制下来
git log
2、使用soft切换到对应的commit
git reset --soft <commit-id>
3、暂存错误代码之后提交的正确代码
git stash
4、继续查询出错的前一次commit-id,并复制下来
5、使用hard切换到对应的commit
git reset --hard <commit-id>
6、恢复暂存的正确代码
git stash pop
7、强制提交代码
git push -f
总结:这种情况已经在开始进行了说明,原理是先切换到错误的commit,并将错误之后的正确代码暂存,然后切换到错误之前的commit,恢复正确的代码,这样就将错误的commit从中间排除出来了,最后进行push。覆盖之前的操作。
四、多分支转移commit
场景解释:假设有两个分支dev1,dev2, 你在dev1开发, 但是因为某些奇怪的原因,切换到了dev2,巧合的是你忘记了自己切换到dev2的事情,所以把本应该提交到dev1的代码,提交到了dev2. 此时应该可以使用如下操作
1、在错误分支查询这次不应该出现的commit-id,并复制下来
2、切换到正确分支
git checkout <branch name>
3、将错误的commit转移到当前分支
git cherry-pick <commit-id>
命令解释
git reset --hard 与 git reset --soft的区别
git–hard会删除本地代码,并将指针切换到指定的commit git–soft不会删除本地代码,并将指针切换到指定的commit
git stash
git stash暂存当前没有commit过的代码,并且可以连续多次stash git stash pop可以按顺序,每次一份恢复暂存的代码 git stash clear 清空暂存的代码
git push -f
强制提交代码
git cherry-pick
从一个分支将某段commit代码转移到另一个分支,可以连续多个转移
|