使用 git 团队协作管理项目的时候,难免会有错误的提交,按照正常的流程应该是在后续的提交纠正这些错误,但是如果这些错误本就不必要的话,是可以用回滚来操作的,于此记录下 git 下回滚的姿势。
如果说,本次提交仅限本地的话,我们可以用 git reset --hard [your reset version] 来回退本地的版本,从而实现取消错误代码。如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $ laravel git:(master) git ll commit ee3105a (HEAD -> master) Author: caixian <qq52577517@163.com> Date: Wed Dec 4 09:34:17 2019 +0800 some stupid do this app/Http/Controllers/User.php | 1 + 1 file changed, 1 insertion(+) commit c92f163 (origin/master) Author: caixian <qq52577517@163.com> Date: Sat Nov 9 14:55:46 2019 +0800 clear cors :q $ laravel git:(master) git reset --hard c92f163 HEAD is now at c92f163 clear cors
如上,由于我们还未推送至远程,所以我们接下来的 commit, push 等一系列的行为都是正常的。
如果说,某人不慎把错误代码提交且推送到看远程的话,这个时候就小心了,正常情况下,尽量走正常路线解决错误代码 (既在当前版本下找到错误代码且更正然后提交到远程) ,正式环境下的代码可以用 git reset --hard [version] 暂时回退到正常版本。如果涉及到的代码量不大的话,我们可以用到 git revert [version] 来撤销更改。如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 $ laravel git:(master) git ll commit 9a258dc (HEAD -> master, origin/master) Author: caixian <qq52577517@163.com> Date: Wed Dec 4 09:46:29 2019 +0800 some stupid do this app/Http/Controllers/User.php | 1 + 1 file changed, 1 insertion(+) commit c92f163 Author: caixian <qq52577517@163.com> Date: Sat Nov 9 14:55:46 2019 +0800 clear cors :q $ laravel git:(master) git revert 9a258dc Revert "clear cors" This reverts commit 9a258dc95d0c8c5b75c9e33c1513479be2f07e53. # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # # On branch master # Changes to be committed: # modified: app/Http/Controllers/User.php # ~ ~ ~ :wq [master fda0be6] Revert "some stupid do this" 1 file changed, 7 insertions(+), 6 deletions(-) $ laravel git:(master) git push origin master Enumerating objects: 7, done. Counting objects: 100% (7/7), done. Delta compression using up to 4 threads Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 437 bytes | 437.00 KiB/s, done. Total 4 (delta 3), reused 0 (delta 0) remote: Resolving deltas: 100% (3/3), completed with 3 local objects. remote: remote: GitHub found 2 vulnerabilities on ElegantLive/learn-laravel's default branch (2 moderate). To find out more, visit: remote: https://github.com/ElegantLive/learn-laravel/network/alerts remote: To github.com:ElegantLive/learn-laravel.git 9a258dc..fda0be6 master -> master $ laravel git:(master) git ll commit fda0be6 (HEAD -> master, origin/master) Author: caixian <qq52577517@163.com> Date: Wed Dec 4 09:49:54 2019 +0800 Revert "some stupid do this" This reverts commit dbdc6db09ffa9bd5af461fc91f04261566bb017c. app/Http/Controllers/User.php | 1 - 1 file changed, 1 deletion(-) commit 9a258dc Author: caixian <qq52577517@163.com> Date: Wed Dec 4 09:46:29 2019 +0800 some stupid do this app/Http/Controllers/User.php | 1 + 1 file changed, 1 insertion(+) commit c92f163 Author: caixian <qq52577517@163.com> Date: Sat Nov 9 14:55:46 2019 +0800 clear cors :q
由上可以看到,我们成功撤销了some stupid do this 的更改,且成功推送到了远程,这样我们就可以基于上个版本(clear cors)继续开发。
注意: git revert [version] 是撤销某个提交的更改,不是回退到某个版本
当然,如果说,有多个错误提交形成一错再错的连环作用的话,建议基于稳定版本重新开一个分支
1 2 3 git checkout -b [new branch name] // 切换至新分支 git reset --hard [version] // 回退至稳定版本 git push -f origin [new branch name] // 强制推送到远程(当然你也可以基于当前分支回退稳定版本,然后强行推送至远程)
祝你好运
enjoy and happy coding!