背景:學習git相關命令
git撤銷修改和版本回退
git status查看當前倉庫的狀態
liuzhipeng@exdroid43:~/pad/pad-test$ git status 位於分支 master 您的分支與上游分支 'origin/master' 一致。 尚未暫存以備提交的變更: (使用 "git add <文件>..." 更新要提交的內容) (使用 "git checkout -- <文件>..." 丟棄工作區的改動) 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/AuTutuTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/AuTutuVideoTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/LinpackTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/Mark3DTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/MobileXPRTTest.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/UiAssistant.java 修改: PadTest2.0/PadAutoTest/UiAutomator/pad/src/androidTest/java/com/softwinner/performance/benchmark/mark3d/VellamoTest.java 修改: PadTest2.0/testcase/AI030002-performance-3DMark.py
下面來解析git checkout的意思: git checkout --readme.txt
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這里有兩種情況:
一種是readme.txt自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;(上一次的git commit 后,修改readme.txt 但沒有執行git add,回到上一次的git commit后的結果)
一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。(修改readme.txt,並且git add,然后又修改了readme.txt, 此時執行git checkout,回到git add 后的狀態)
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。
場景分析
需求 ,現在我git add之后,但是我還想放棄git add,回到上一次git commit的狀態,怎么辦? (就是說撤銷掉暫存區,回到工作區的狀態)
分兩步執行:
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
Git同樣告訴我們,用命令git reset HEAD file可以把暫存區的修改撤銷掉(unstage),重新放回工作區:
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。(HEAD^表示上一個版本,就是git log的第二次)
Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。
總結時間:
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
https://blog.csdn.net/qq_29232943/article/details/78975982
-
已經用 git commit 提交了代碼
-
使用git reset -h 可以查看git rest 幫助,git reset 有幾個參數–mixed (默認) –soft –hard
-
soft 參數:git reset –soft HEAD~1 或者git reset –soft HEAD^意為將版本庫軟回退1個版本,所謂軟回退表示將本地版本庫的頭指針全部重置到指定版本,且將這次提交之后的所有變更都移動到暫存區 ,就是回到上面第2種情況,這個時候你的修改還在暫存區
-
默認的mixed參數:git reset HEAD~1 意為將版本庫回退1個版本,將本地版本庫的頭指針全部重置到指定版本,且會重置暫存區,即這次提交之后的所有變更都移動到未暫存階段就是工作區git add之前。
-
hard參數:git reset –hard HEAD~1 意為將版本庫回退1個版本,但是不僅僅是將本地版本庫的頭指針全部重置到指定版本,也會重置暫存區,並且會將工作區代碼也回退到這個版本
-
。可以使用 git reset –hard HEAD^ 來回退到上一次commit的狀態。此命令可以用來回退到任意版本:git reset –hard commitid
你可以使用 git log 命令來查看git的提交歷史。git log 的輸出如下,之一這里可以看到第一行就是 commitid,git log -3來查看最近三次的提交
