前話:在vscode中,安裝git history外掛程式,安裝之後就可以用f1,選擇git:view history(git log),即可看到git的提交記錄。
在每一行的最後面,就是commit_id
git reset
如果回退乙個只是commit的,並沒有push到遠端分支的提交:
則直接執行
git reset --hard commit_id
//回退到commit_id的這次提交
//或者
git reset --hard head^
//回退到上一次提交
//head 等同於當前分支的最新的一次commit提交id
//head^ 是上一次提交
注:如果執行git reset --hard head^ 顯示more?
這是因為在windows的cmd控制台中換行預設符是^,所以more?的意思是問你下一行是否需要再輸入,^符號就被當做換行符了。
解決方法:
//加引號
git reset --hard "head^"
//加^
git reset --hard head^^
//換成~
git reset --hard head~
git reset --hard head~1
//~後面的數字表示回退幾次提交,預設是一次
另外:git reset 還有以下用法:
git reset --soft
git reset --mixed
區別就是:
使用--soft就僅僅將頭指標恢復,已經add的快取以及工作空間的所有東西都不變。也就是執行了git reset --soft 就相當於只回退了git commit -m 這一步,改動的檔案已經在暫存區了。
使用--mixed,就將頭指標恢復,已經add的快取也會丟失掉,工作空間的**什麼的是不變的。也就是執行了git reset --mixed 就相當於回退到了git add之前,改動的檔案還在工作區,沒有add到暫存區。
使用--hard,一切就全都恢復了,頭指標恢復,add的快取消失,工作空間的**什麼的也恢復到以前狀態。也就是相當於你啥都沒幹過,工作區也沒有了
另外,如果已經push到遠端了,怎麼回退?
依舊是先在本地回退,然後推到遠端。
但是如果直接push的話,會push失敗,因為本地的版本落後於遠端的版本。
那就只有強退,加個--force引數
git push origin --force
git revert
回退版本還可以用git revert
如果回退的是乙個只commit還沒有push到遠端的操作:
git revert commit_id 操作不會刪除commit_id這次提交記錄,並且還會新增乙個新的revert的提交記錄。
舉個例子:
如果你依次有commit_id為a、b、c三次提交記錄,並且a和b都已經提交到遠端,c還沒有push到遠端,現在想撤銷c的改動,
則執行git revert c,然後會生成一條d的commit_id,記錄你revert了c。
然後你執行git status,會告訴你你有2次commit沒有push。
然後你執行push到遠端,就會記錄下來你的c、d兩次提交。
如果你revert的是已經push到遠端的提交,會在工作區報衝突,需要你手動撤銷你revert分支之後的改動,然後再次add,commit,push就可以了。
舉個例子:
如果你依次有commit_id為a、b、c三次提交記錄,並且都已經提交到遠端,現在想撤銷b之後的改動,
則執行git revert b,然後工作區會報衝突,報的是a之後的改動和當前的改動有衝突,可以選擇採用傳入的更改,然後接著add,commit,push就可以了。
注意:git reset 後面跟的commit_id 是回滾到這次提交的操作
git revert 後面跟的commit_id 是回滾這次提交
Git撤銷已經push的檔案
撤銷已經push的檔案該怎麼做呢?比如我第一次提交了四個修改的 檔案,然後第二次和第三次又提交了部分修改,但是這兩次修改又不想要了,該怎麼辦呢?首先git branch 檢視當前分支 git log 檢視提交日誌 git reset hard db6cde47b337847c2e2fbc22f9de...
Git 如何遺棄已經 Push 的提交
相信大家都知道,git 相比於 svn,優勢不言而喻,以致於現在大多數公司的專案都在採用 git 進行管理。作為乙個開發人員,對 git 的使用自然應該是得心應手。如果你還不會使用 git 的話,那我勸你還是不要聲張,好好的去學習一番,再自己弄個實驗專案走一下流程,以免遭到同事的鄙視。每個公司都會有...
Git 七 版本回退
現在,你已經學會了修改檔案,然後把修改提交到git版本庫,現在,再練習一次,修改readme.txt檔案如下 git is a distributed version control system.git is free software distributed under the gpl.然後嘗試...