本文連接:http://volnet.github.io/#!docs/git/reset-to-old-version.mdgit
在使用Git進行版本管理的時候,常常會遇到一些錯誤的提交。github
在開始演示以前,咱們先創建一個測試的環境。服務器
mkdir gittest cd gittest git init echo "a" >> a.md git add . git commit -m "add a.md" echo "b" >> b.md git add . git commit -m "add b.md" echo "c" >> c.md git add . git commit -m "add c.md" rm -rf a.md git add . git commit -m "remove a.md" git remote add origin http://gitserver-url
git log --oneline 931568f remove a.md f622cef add c.md 2a0c5a9 add b.md 6fbba34 add a.md # 假設要回到2a0c5a9 git revert -n 2a0c5a9..931568f # ls能夠看到工做目錄中的文件已經恢復到當時的狀態,這個時候查詢git status將看到 2a0c5a9 commit前的狀態。 # 這時候須要從新提交文件 git commit -m "revert 2a0c5a9..931568f and recommit" git push
git log --oneline 931568f remove a.md f622cef add c.md 2a0c5a9 add b.md 6fbba34 add a.md # 假設咱們要恢復到2a0c5a9,則能夠 git reset --hard 2a0c5a9 # 此時ls你將看到a.md git push -f #這裏須要增長-f或者--force命令,緣由當前的HEAD指針指向了一箇舊版本,而服務器上這個版本不是最新版本。其實服務器並不知道你是使用reset命令獲得的舊版本,覺得你是一個長期沒有獲取最新版本的用戶,提交了一個錯誤的版本。所以它會建議你git pull以後再更新。若是你很是明確你要這麼作,而且不關心你目標版本以後的版本(可能包含別人的提交),你大能夠就此使用-f來強制提交。同時你將得到一個乾淨的歷史,就像什麼都沒有發生過同樣。