Git · 二 git的工作樹、版本庫以及分支管理和git status -s、git checkout、git branch等相關指令的使用

先理解Git的空間概念(這引用了Runoob.com 的一張圖)

 

工作區:指的是文件夾中所有非隱藏的文件

版本庫:其實應該叫分支branch比較好理解(後面會仔細解釋)

index(版本庫的暫存區):這個也是git指令中 --cached,在工作區執行git add後就會添加代碼快照到這個暫存區

以上三者的關係

1、工作區和暫存區(index)

(1)當每次修改代碼和添加新文件提交到暫存區,通過執行

$git add . 
#或者
$git add --<某個文件>

提交後,修改的代碼就會生成一份快照放到暫存區,此時你可以通過

$git status -s

查看當前工作目錄和暫存區的狀態

 

這裏字母有有兩列:

第一列是文件的狀態(與暫存區的狀態)

第二列是文件內容的狀態(是否修改(未提交到暫存區的))

(2)從通過暫存區的代碼恢復工作區的代碼的狀態

$git checkout -- <file>

注意:這個操作會覆蓋你工作區指定文件的所做的修改,慎重操作!!

2、對於暫存區的操作

$git rm -r --cached .
#或者刪除某一個
$git rm --cached -- <file>

這個指令用於刪除暫存區內代碼快照(. 一般是代表着所有的文件)

注意:如果接着執行了git commit提交到分支,此時分支上對應被文件也會被刪除,再執行git push同步遠程分支,此時遠程分支上文件也會被刪除。當遠程分支上面的文件被刪除了,其它跟隨這個遠程分支的人,只要執行git pull後,相應文件也會同樣被刪除了。(這樣說有點繞,換句話說這樣遠程分支即github上的文件被刪除,其實跟隨它的分支都會跟着改變)

還有一點,

$git rm -- <file> #會同時刪除暫存區和工作區相應的文件(即在目錄上找不到這個文件了)
$git rm --cached -- <file> #只會刪除暫存區的文件,此時工作區的文件會被保存
                           #但是不再與git相關(即不受版本控制)

3、分支和暫存區、工作區

從分支回退到之前的版本,先通過git reflog查看當前的歷史提交信息

圖中的HEAD@{n}  對應成指令就是HEAD~n  其中HEAD@{0} 直接寫成HEAD

git reset --soft 、git reset --hard 和git reset -mixed區別

(1) git reset --hard

將暫停區和工作區的代碼全部回退到指定版本,注意:不保留暫存區和工作區的記錄

(2) git reset --soft

僅僅只是回退commit記錄,不修改暫存區和工作區的記錄

這個的使用場景是,當你覺得你的修改提交還不夠完整,要回退,重新把完整的修改上傳分支時可使用

(3) git reset -mixed 或者git reset

把暫存區回退,工作區不影響

現在來說一下版本庫爲什麼叫分支恰當一點

    Git最突出的特點就是你可以建立多個分支,但是隻存在一個目錄,無需創建多個目錄,我們可以使用git branch指令在不同分支進行切換和開發。當建立一個git環境,會建立一個master分支,作爲默認的本地分支,如果不切換其它分支,我們所有修改都在這個分支內進行。所以圖中版本庫我覺得應該稱爲分支,三個空間應該稱爲工作區、暫存區、當前分支。我們可以通過切換不同分支來進行開發,不同分支內的代碼互不相關,也可合併。

紅色框指的是當前所在的分支,使用一下指令就可以查詢所有的分支信息

$ git branch -a

前面有星號的,表示它就是當前所在的分支

創建新的分支,以當前分支克隆出來一個新的分支,新的分支與當前分支沒有相關

$ git branch "master_copy"

切換不同分支

$ git checkout <branch>

注意:切換不同分支所有代碼都需要commit,否者git會提示

注意:當你切換HEAD^此類的分支上,要特別注意,小心操作,此時HEAD會提示你處於遊離狀態。在非本地分支上,只要你切換分支,你所做的代碼修改很容易丟失,最好的做法是,切換到歷史分支上,在實例分支建立新的本地分支,然後再進行修改,與master分支進行合併修改,git也是這樣提示的:

不同分支間的合併

$git merge <branch>

刪除無用的分支。分支與本地主分支合併後,如果沒有價值了,就可以刪除了

$git branch -d <branch>

本章的大概內容到這裏就結束了,文中指令我都有親自測試過,均可用,如有錯誤歡迎大佬指出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章