Git學習總結三(工作區和暫存區、撤銷修改)


工作區和暫存區

工作區(Working Directory)

就是你在電腦里能看到的目錄,比如我的learngit文件夾就是一個工作區:

版本庫(Repository)

工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。

Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD

前面講了我們把文件往Git版本庫里添加的時候,是分兩步執行的:

第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;

第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支。

所以,git add命令實際上就是把要提交的所有修改放到暫存區(Stage),然后,執行git commit就可以一次性把暫存區的所有修改提交到分支。


git diff HEAD -- readme.txt命令可以查看工作區和版本庫里面最新版本的區別。

tips:每次修改,如果不用git add到暫存區,那就不會加入到commit中。


撤銷修改

git checkout -- file可以丟棄工作區的修改:

$ git checkout -- readme.txt

命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這里有兩種情況:

一種是readme.txt自修改后還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;

一種是readme.txt已經添加到暫存區后,又作了修改,現在,撤銷修改就回到添加到暫存區后的狀態。

總之,就是讓這個文件回到最近一次git commitgit add時的狀態。

tips:git checkout -- file命令中的 -- 很重要,沒有 -- ,就變成了“切換到另一個分支”的命令,我們在后面的分支管理中會再次遇到git checkout命令。


如果已經git add到暫存區了:

Git同樣告訴我們,用命令git reset HEAD <file>可以把暫存區的修改撤銷掉(unstage),重新放回工作區:

$ git reset HEAD readme.txt
Unstaged changes after reset:
M    readme.txt

git reset命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD時,表示最新的版本。

然后再用git checkout -- readme.txt命令丟棄工作區的修改。

1 $ git checkout -- readme.txt
2 
3 $ git status
4 On branch master
5 nothing to commit, working tree clean

小結

又到了小結時間。

場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file

場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。


免責聲明!

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



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