git 命令行(一)
1. 版本回退
在實際工作中,我們腦子裏怎麽可能記得一個幾千行的文件每次都改了什麽內容,不然要版本控制系統幹什麽。版本控制系統肯定有某個命令可以告訴我們歷史記錄,在Git中,我們用 git log
命令查看:
退出git log命令行是: q。
Git提供了一個命令 git reflog
用來記錄你的每一次命令:
如果我們要實現回退, Git必須知道當前版本是哪個版本,在Git中,用 HEAD
表示當前版本,也就是最新的提交009befc...711741
(註意我的提交ID和你的肯定不一樣),上一個版本就是HEAD^
,上上一個版本就是 HEAD^^
,當然往上100個版本寫100個^
HEAD~100
。
現在,我們要把當前版本回退到上一個版本,就可以使用 git reset
命令:
我們也可以是使用 commit_id 來在不同版本之間回退。
2. 版本庫(Repository)
工作區有一個隱藏目錄.git
,這個不算工作區,而是Git的版本庫。
Git的版本庫裏存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master
,以及指向master
的一個指針叫HEAD
。
前面講了我們把文件往Git版本庫裏添加的時候,是分兩步執行的:
第一步是用 git add
把文件添加進去,實際上就是把文件修改添加到暫存區;
第二步是用 git commit
提交更改,實際上就是把暫存區的所有內容提交到當前分支。
2. 撤銷修改
1. 在Git中,git checkout -- file
可以丟棄工作區的修改:
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作區的修改全部撤銷,這裏有兩種情況:
一種是readme.txt
自修改後還沒有被放到暫存區,現在,撤銷修改就回到和版本庫一模一樣的狀態;
一種是readme.txt
已經添加到暫存區後,又作了修改,現在,撤銷修改就回到添加到暫存區後的狀態。
總之,就是讓這個文件回到最近一次 git commit
或 git add
時的狀態。
git checkout -- file
命令中的 --
很重要,沒有 --
,就變成了“切換到另一個分支”的命令,我們在後面的分支管理中會再次遇到git checkout
命令。
2. 如果我們修改了文件,還 git add
到暫存區了,慶幸的是,在commit
之前,你發現了這個問題。用git status
查看一下,修改只是添加到了暫存區,還沒有提交:Git同樣告訴我們,用命令 git reset HEAD file
可以把暫存區的修改撤銷掉(unstage),重新放回工作區:
git reset
命令既可以回退版本,也可以把暫存區的修改回退到工作區。當我們用HEAD
時,表示最新的版本。再用git status
查看一下,現在暫存區是幹凈的,工作區有修改:然後按照第一步的方法回退。總結如下:
git 命令行(一)