兩種狀況(場景)java
狀況一
代碼還只在本地,未push到運程倉庫,想把代碼還原到上一次commit的代碼,此時操做爲代碼撤銷nginx
解決方案:git
git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]
狀況二
代碼已經push到運程倉庫,想把代碼還原到上一次提交,此時操做爲代碼回滾spa
解決方案:3d
1)先查看git提交日誌,找到上次提交的信息,輸入命令 git log (查看所有日誌)或 git log -xx(查看最近xx條日誌)
指針
$ git log -3 commit 4dc08bb8996a6ee02f Author: Mark <xxx@xx.com> Date: Wed Sep 7 08:08:53 2016 +0800 xxxxx commit 9cac9ba76574da2167 Author: xxx<xx@qq.com> Date: Tue Sep 6 22:18:59 2016 +0800 improved the requst commit e377f60e28c8b84158 Author: xxx<xxx@qq.com> Date: Tue Sep 6 14:42:44 2016 +0800 changed the password from empty to max123
能夠看到,我標紅的就是commit的ID標識,因此爲了更好區分你每次代碼提交標識,建議每次提交時給到Tag(提交信息)。日誌
2)回滾到指定的版本(hard後面接的是上面標紅的ID,也就是想回滾到的版本)code
## 回退到指定版本,不保留原更改代碼 git reset --hard e377f60e28c8b84158 ## 回退到指定版本,保留原更改代碼,且生成新的提交 git revert e377f60e28c8b84158
3)強制提交(這個時候已經將代碼回退了,你如今的分支狀態就處於你上一步指向的版本)blog
git push -f origin master
4)若是你只是誤提了代碼,想保留代碼改動的話,那就在2)的時候使用revert 命令,而不是reset,二者區別以下:it
關於對Git中reset詳解,能夠參考:https://www.jianshu.com/p/12803dba313e
補充場景:誤將其餘分支代碼合到本身分支且代碼已提交到遠端
思路:
先將代碼回滾到上一次提交,這樣本來提交到遠端的代碼就會被撤銷並在本地從新生成一次提交,接着將想提交的代碼修改完後,暫存到本地存起來,接着切換到主分支將主分支代碼拉下來保持其代碼一致,隨後刪除掉本來提交代碼的分支,從新新建一個分支,接着將本來暫存的代碼拿出來,提交到新分支上,結束!
解決步驟:
git status 查看當前分支狀態 git log 查看提交歷史 git reset *** 根據提交歷史ID回滾代碼至上一次提交(參考上文) git stash 將回滾後的代碼,暫存到本地倉庫 git checkout master 將當前分支切換至master主分支 git pull 將master的代碼拉至本地,保持當前代碼是正式環境運行代碼 git branch -d ***(本來提交代碼的分支名) 刪除本地原分支 git checkout -b *** 新建一個新的分支且切到分支上 git stash pop 將暫存至本地倉庫的代碼取出來 git push --force 將代碼強制發佈