1. git本地版本回退
Git reset --hard commit_id(可用 git log –oneline 查看)
2. git遠程版本回退
git push origin HEAD --force #遠程提交回退
下面的命令也可以實現遠程版本回退
git reset --hard HEAD~1 git push --force
3. git reverse和git reset的區別
- git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
- 在回滾這一操作上看,效果差不多。但是在日后繼續merge以前的老版本時有區別。因為git revert是用一次逆向的commit“中和”之前的提交,因此日后合並老的branch時,導致這部分改變不會再次出現,但是git reset是之間把某些commit在某個branch上刪除,因而和老的branch再次merge時,這些被回滾的commit應該還會被引入。
- git reset 是把HEAD向后移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,能夠抵消要被revert的內容。
git reset + commit號
git reset命令后面是需要加2種參數的:”–hard”
和”–soft”
。
這條命令默認情況下是”–soft”。執行上述命令時,這該條commit號之 后(時間作為參考點)的所有commit的修改都會退回到git緩沖區中。
使用git status命令可以在緩沖區中看到這些修改。而如果加上”–hard”參數,則緩沖區中不會存儲這些修改,git會直接丟棄這部分內容。
但需要注意的一 個問題是:由於這樣的重置是直接在本地的修改,無法提交到遠程服務器,如果直接丟棄的內容已經被推到遠程服務器上了,則會造成本地和服務器無法同步的問題。
即git reset –hard只能針對本地操作,不能針對遠程服務器進行同樣操作。如果從本地刪掉的內容沒有推到服務器上,則不會有副作用;如果被推到服務器,則下次本地和 服務器進行同步時,這部分刪掉的內容仍然會回來。
而上面注意中提到的問題則可以很好的被git revert 命令解決。
git revert + commit 號
該命令撤銷對某個commit的提交,這一撤銷動作會作為一個新的修改存儲起來,這樣,當你和服務器同步時,就不會產生什么副作用。