Git恢復之前版本的三種方法之reset、revert、rebase詳解
一. 問題描述
在利用github實現(xiàn)多人合作程序開發(fā)的過程中,我們有時會出現(xiàn)錯誤提交的情況,此時我們希望能撤銷提交操作,讓程序回到提交前的樣子
本文總結了三種解決方法:
- 回退(reset)
- 反做(revert)
- 回扣(rebase)
二. 解決方案
方法一:git reset
原理: git reset的作用是修改HEAD的位置,即將HEAD指向的位置改變?yōu)橹按嬖诘哪硞€版本
具體實現(xiàn):
- 查看版本號 使用命令“git log”查看:
- 使用“git reset --hard 目標版本號”命令將版本回退:
- 再用“git log”查看版本信息,此時本地的HEAD已經(jīng)指向之前的版本:
- 使用“git push -f”提交到遠程更改
- 注意: 此時如果用“git push”會報錯,因為我們本地庫HEAD指向的版本比遠程庫的要舊
方法二:git revert
原理:
git revert是用于“反做”某一個版本,以達到撤銷該版本的修改的目的。
比如,我們commit了三個版本(版本一、版本二、 版本三),突然發(fā)現(xiàn)版本二不行(如:有bug),想要撤銷版本二,但又不想影響撤銷版本三的提交,就可以用 git revert 命令來反做版本二,生成新的版本四,這個版本四里會保留版本三的東西,但撤銷了版本二的東西。
適用場景:
如果我們想撤銷之前的某一版本,但是又想保留該目標版本后面的版本,記錄下這整個版本變動流程,就可以用這種方法。
具體實現(xiàn):
1.查看 使用命令“git log”查看commit提交記錄
2.使用“git revert 版本號”反做,并使用“git commit -m 版本名”提交
3.使用“git push”推上遠程庫
方法三:git rebase -i (commit-id) 或 git rebase -i HEAD~(回退幾步)
1.查看 使用命令“git log”查看commit提交記錄
2.git rebase -i (commit-id) 選擇回退版本之前的一次commit版本
3.編輯文件命令行輸入 a,切換到編輯模式 將要刪除的commit之前的 pick 單詞改為drop
4.按下Esc(退出)鍵 命令行輸入 :wq 保存文件退出
5.使用“git push -f”提交到遠程更改
6.在使用 git rebase -i (commit-id) 過程中若撤銷回退可以使用 git rebase --abort 撤回
若在 git rebase后出現(xiàn)(xxx|REBASE-i)這種情況
原因:用git推送數(shù)據(jù)到倉庫的時候會出現(xiàn)推送失敗
解決方案: 使用git rebase --abort 代碼回退 回到git rebase之前的狀態(tài)
其他操作
一. 當代碼庫遠程遷移后,修改本地代碼關聯(lián)到遠程地址
1.遷移前先查看當前代碼庫的遠程地址
git remote -v 查看遠程地址
2.修改本地代碼關聯(lián)到的遠程地址
git remote set-url origin [遠程地址]
3.查看當前代碼庫的遠程地址是否修改成功
git remote -v 查看遠程地址
4.將本地的master分支推送到origin主機
①指定origin為默認主機 ,后面就可以不加任何參數(shù)使用git push
git push -u origin master
② 提交本地test分支 作為 遠程的master分支 ,不指定默認主機
git push origin test:master
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
關于大型頁游后端管理系統(tǒng)的一點經(jīng)驗和個人見解
做過游戲開發(fā)的人都知道,端游可以用c++,頁游可以用sl或者as3,鑒于這段時間一直在看網(wǎng)頁游戲開發(fā)的知識,所以關于游戲開發(fā),我有一點自己的見解2012-06-06ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討
ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討...2007-03-03抓包工具Fiddler的使用方法詳解(Fiddler中文教程)
本文詳細說明了抓包工具Fiddler的使用方法與各個面板的功能介紹 每個按鈕都說明了他的功能,完全可以當作Fiddler的中文教程了2018-10-10