背景
使用git來進(jìn)行版本控制嘹害,發(fā)現(xiàn)自己多commit了個東西,然后想撤回泉手。之前自己這塊一直沒有去看,當(dāng)時忙也來不及去操作偶器,操作了一下好像也沒有操作對斩萌,所以都是復(fù)制自己修改的然后刪除分支,這樣又麻煩有浪費時間屏轰。
解決
今天抽了點時間來看一下這方面颊郎,就是關(guān)于自己commit但是還沒有push的操作。具體在命令行操作和IDEA 頁面操作給出結(jié)論霎苗。先來解釋幾個術(shù)語
HEAD: 這是當(dāng)前分支版本頂端的別名姆吭,也就是在當(dāng)前分支你最近的一個提交
Index: 也被稱為Staging area,是指一整套即將被下一個提交的文件集合唁盏。他也是將成為HEAD的父親的那個commit
Working Copy: Working copy代表你正在工作的那個文件集
也可以這么理解猾编,index 為git add后的代碼瘤睹,Working Copy 為本地修改的代碼升敲,HEAD 為commit后的代碼
1答倡、git命令行操作
- 1、先查看git提交的狀態(tài)驴党,使用git log
Administrator@SKY-20181226BFP MINGW64 /e/study_workSpace/study_space (master)
$ git log
commit 994b37d2abdfd44f447100d10318095e209c2ae4 (HEAD -> master)
Author: zengguanghao <zengguanghao@bonc.com.cn>
Date: Tue Mar 24 20:21:59 2020 +0800
git reset demo
commit cf32bfdb35e6808cb4052924e496211c18ebba42 (origin/master, origin/HEAD)
Author: zengguanghao <zengguanghao@bonc.com.cn>
Date: Tue Mar 24 20:21:15 2020 +0800
demo
如圖所示瘪撇,HEAD -> master 相當(dāng)于本地的coomit的指針,origin/master, origin/HEAD 相當(dāng)于遠(yuǎn)程的指針港庄,如圖所示相當(dāng)于本地的比遠(yuǎn)程的多了一次commit倔既,是比遠(yuǎn)程提前的狀態(tài)。
- 2鹏氧、撤回commit的狀態(tài)
撤回commit的狀態(tài)的命令為
git reset 參數(shù) commitId
具體有3個參數(shù)
--mixed 會保留源碼,只是將git commit和index 信息回退到了某個版本.(默認(rèn))
--soft 保留源碼,只回退到commit信息到某個版本.不涉及index的回退,如果還需要提交,直接 commit即可.
--hard 源碼也會回退到某個版本,commit和index 都會回退到某個版本.(注意,這種方式是改變本地代碼倉庫源碼)
所以,--hard 會丟失掉本地修改的代碼渤涌,這種場景對于提交錯誤等情況是不友好的。我們通常希望保留本地的修改然后再繼續(xù)提交的一般把还。
注意:我們撤回git狀態(tài)的時候实蓬,因為我們是想撤回到上一個提交的狀態(tài),所以在寫commitID的時候吊履,要寫本次提交即HEAD 的上一個的commitID
git reset --mixed cf32bfdb35e6808cb4052924e496211c18ebba42
這樣就將commit的提交撤回了安皱。
2、IDEA操作
1艇炎、第一種方法
-
1酌伊、如圖所示,打開這個
-
2缀踪、在箭頭位置寫上你想回退到的commitID (commitID可以使用git log 查看)
2居砖、第二種方法
另外一種方法 可以直接在log 中選擇相應(yīng)的分支,然后進(jìn)行選擇驴娃。直接回退就可以奏候。