git的理解

git

0.須要注意的點

  1. 基於git管理來看,工做區,暫存區,版本倉庫實質上是管理的修改,暫存和提交的差別記錄。"不能說提交後暫存區就沒了",這比較容易引發誤差git

  2. 廖雪峯講的概念有誤指針

    stage(暫存區) 並非 working directory(工做區)和 HEAD(版本庫) 之間的 臨時樞紐,不能按照 "內存"、"購物車" 來理解 stage,不然你會很難理解 git diff、git diff --staged日誌

    stage 中擁有着 和 working directory 中如出一轍 的 目錄結構、文件內容code

  3. 當從版本庫或暫存區回退到工做區時,工做區新增的文件(也就是版本庫和暫存區沒有的文件)不會被刪除。,這點很重要。cdn

1.修改

git add 其實是讓工做區的內容同步到暫存區blog

git commit 實際上就是把暫存區的內容同步到版本庫內存

git checkout <file_name> 其實就是讓暫存區同步到工做區get

git reset <commit> 其實就是讓版本倉庫的內容同步到暫存區同步

git reset --hard <commit> 實際上是讓版本倉庫的內容同步到暫存區和工做區,注意,這個時候工做區新增的文件不會被刪除it

1.1reset

git reset --soft HEAD~ 只是將版本倉庫的tree的指針指向HEAD的父節點,而不會改變暫存區和工做區

git reset --mixed HEAD~ 在版本庫回退上一版本的同時,讓版本庫內容同步到暫存區

git reset --hard HEAD^ 在版本庫回退上一版本的同時,讓版本庫內容同步到暫存區和工做區

git reset HEAD 實際上就是與git reset --mixed HEAD^相同

1.2 經過路徑來reset

git reset file.txt(這實際上是git reset --mixed HEAD file.txt的簡寫形式)會讓file.txt從HEAD複製到暫存區中。正好與git add相反

git reset HEAD^ file.txt 會將HEAD^的file.txt覆蓋暫存區

1.3 checkout-index

git checkout-index -a 讓將暫存區的文件寫入工做區,注意:不會覆蓋工做區的文件,即只會寫入暫存區有而工做區沒有的文件

git checkout-index -a -f 讓工做區被暫存區文件所有覆蓋,注意:該方法不會刪除暫存區沒有而工做區有的文件

1.4 checkout:切換分支和恢復暫存區的文件

  1. git checkout <branch>

    會讓版本庫的指針指向<branch>分支的HEAD,同時讓工做區和暫存區同步到HEAD,注意:原來工做區的修改會被保留

  2. git checkout -b <new_branch>

    會建立分支並讓版本庫的指針指向該分支

  3. git checkout [--detach] <commit>

    能夠讓版本庫的HEAD指向<commit>,同時讓工做區和暫存區同步到HEAD,注意:原來工做區的修改會被保留

  4. git checkout <file_name>

    能夠讓暫存區的特定文件覆蓋工做區,(若是是想暫存區文件所有覆蓋工做區,能夠git checkout .,注意:該方法不會刪除暫存區沒有工做區有的文件)

2.顯示差別

git diff 詳細顯示工做區和暫存區的差別

git diff HEAD --filename 比較工做區和版本庫的差別

git status 能夠顯示工做區和暫存區的差別與暫存區和版本庫的差別

git log 顯示版本庫提交日誌

3.git 出現:號

表示還有未顯示的內容,能夠繼續按回車鍵查看,或者按q退出

參考:

git官網

相關文章
相關標籤/搜索