Git系列教程(一):簡介、安裝、配置我們學習了分布式和版本控制系統的概念、Git具有的8個功能以及如何在Windows上安裝Git、進行相關配置並創建版本庫。
Git管理修改
Git相比於其他版本控制系統SVN的優勢在於Git跟蹤並管理的是修改,而非文件。那什麼是修改呢?新增一行,稱為一個修改,刪除一行,稱為一個修改,更改字符,稱為一個修改,刪除一些又添加一些,也稱為一個修改,甚至創建一個新文件,也稱為一個修改。值得注意的是每次修改,如果不用git add到暫存區,那就不會加入到commit中。
Git撤銷修改
當我們在readme.txt中添加了一行:I hope to leave work early.調皮完之後刪掉最後一行,手動把文件恢復到上一個版本。用git status查看一下:
Git提示我們用git checkout -- file可以丟棄工作區的修改:
$ git checkout -- readme.txt
命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷,這裡有兩種情況:
一種是readme.txt自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一次git commit或git add時的狀態。我們再看看readme.txt的文件內容,內容已經被還原了。
checkout命令用法如下:
1. git checkout [-q] [<commit>] [--] <paths> ...
2. git checkout [<branch>]
3. git checkout [-m] [ [-b | -- orphan ] <new_branch>] [start_point]
用法2比用法1的區別在於,用法1包含了路徑。為了避免路徑和引用(或提交ID)同名而發生衝突,可以在<paths>前用兩個連續的連字符作為分隔。用法1的<commit>是可選項,如果省略,則相當於從暫存區進行檢出。
git checkout -- file命令中的--很重要,沒有--,就變成了「切換到另一個分支」的命令,我們在後面的分支管理中會再次遇到git checkout命令。
上面介紹的是第一種情況,第二種情況便是我們修改了txt文件,加了一行I hope to leave work early.並且使用git add命令添加到了暫存區,值得挽救的是在commit之前,你發現了這個問題。用git status查看一下,修改只是添加到了暫存區,還沒有提交:
Git同樣提示我們,用命令git reset HEAD <file>可以把暫存區的修改撤銷掉(unstage),重新放回工作區。再用git status查看一下,現在暫存區是乾淨的,工作區有修改。然後進行丟棄工作區的修改,$git checkout-- readme.txt
HEAD 可以理解為一個遊標 一直指向當前我們所在版本庫的地址 就是我們當前所在版本庫的頭指針
當然 我們也可以不使用HEAD 可以直接使用版本庫的地址 版本庫地址 可以用 git log 命令列印出來
又到了小結時間。
場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file。
場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作。
場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。