(轉)git checkout 撤銷修改


背景:學習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

  1. 已經用 git commit 提交了代碼

  2. 使用git reset -h 可以查看git rest 幫助,git reset 有幾個參數–mixed (默認) –soft –hard

  3. soft 參數:git reset –soft HEAD~1 或者git reset –soft HEAD^意為將版本庫軟回退1個版本,所謂軟回退表示將本地版本庫的頭指針全部重置到指定版本,且將這次提交之后的所有變更都移動到暫存區 ,就是回到上面第2種情況,這個時候你的修改還在暫存區

  4. 默認的mixed參數:git reset HEAD~1 意為將版本庫回退1個版本,將本地版本庫的頭指針全部重置到指定版本,且會重置暫存區,即這次提交之后的所有變更都移動到未暫存階段就是工作區git add之前。

  5. hard參數:git reset –hard HEAD~1 意為將版本庫回退1個版本,但是不僅僅是將本地版本庫的頭指針全部重置到指定版本,也會重置暫存區,並且會將工作區代碼也回退到這個版本

  6. 。可以使用 git reset –hard HEAD^ 來回退到上一次commit的狀態。此命令可以用來回退到任意版本:git reset –hard commitid

你可以使用 git log 命令來查看git的提交歷史。git log 的輸出如下,之一這里可以看到第一行就是 commitid,git log -3來查看最近三次的提交


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM