【原】git如何撤銷commit(未push)
撤銷commit一般用git reset ,語法如下:
git reset [ --mixed | --soft | --hard] [<commit ID>]
1.使用引數--mixed(預設引數),如git reset --mixed <commit ID>或git reset <commit ID>
撤銷git commit,撤銷git add,保留編輯器改動程式碼
2.使用引數--soft,如git reset --soft<commit ID>
撤銷git commit,不撤銷git add,保留編輯器改動程式碼
3.使用引數--hard,如git reset --hard <commit ID>——此方式非常暴力,全部撤銷,慎用
撤銷git commit,撤銷git add,刪除編輯器改動程式碼
開始撤銷commit的示例:
輸入git log,我們可以看到最近的3次提交,最近一次提交是test3,最早的一次是test1,其中一大串黃色的字母
是commit id
(版本號)
如果嫌輸出資訊太多,可加上--pretty=oneline
引數,即
git log --pretty=oneline
接下來,按下鍵盤上的字母q退出git日誌,準備進行撤銷commit
Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交commit id,上一個版本就是HEAD^(或者HEAD~1),上上一個版本就是HEAD^^(或者HEAD~2),同理往上N個版本寫N個^不太現實,我們寫成HEAD~100。
現在,我們要把當前版本test3上一個版本test2,就可以使用git reset命令:git reset --hard HEAD^,再檢視日誌,發現已經剩下2個commit版本了
git reset --hard HEAD^
最新的那個版本test3已經看不到了,此時你想起有一行程式碼寫得很好,想回到test3版本看下,怎麼做?
辦法其實還是有的,只要上面的命令列視窗還沒有被關掉,記錄還是在,使用命令git reset --hard commit_id可以回退到指定的版本,比如當前例子,我們
找到那個test3的commit id是e09af7ae711e2a79c15144c1e792fb2e27d201ff,然後輸入下面指令就回來了
git reset --hard e09af7ae711e2a79c15144c1e792fb2e27d201ff
版本號可以不用寫全,輸入前4位或更多也是可以,Git會自動去找,不能只寫前一兩位,因為Git可能會找到多個版本號。比如,看完test3版本的程式碼後,現在想回退到最初test1版本,我們
找到那個test1的commit id是ab7b0c2b6e10a20d524156a81f6d4bc15a4ea7f3,然後輸入下面指令就回來了
git reset --hard ab7b
最後在Git中,總是有後悔藥可以吃的,Git提供了一個命令git reflog
用來記錄你的每一次命令,通過它可以查到每個commit id,方便你前進或者回退到指定的版本
&n