Git 不僅僅是個版本控制系統,它也是個內容管理系統(CMS),工作管理系統等。Git 與 SVN,CVS等其它版本控制系統最核心的區別:Git 是分散式的

首先在官網上下載:git-scm.com/downloads,目前最新的版本是2.22.0,我下載的是Windows版本,一下內容也是基於Windows平台的(另外不得不說win10自帶截圖超好用,還支持快捷鍵)

下載好以後開始安裝,安裝路徑最好不要有中文符號,一路Next,直到:

旋轉Git默認的編輯器,選項很多,隨意,這裡我選的Visual Studio Code,下一步:

這裡配置環境變數,選第2項,能夠從命令行和第三方軟體使用Git,也是推薦的,Next:

選擇SSL庫,使用OpenSSL更通用,但是選擇Windows原生的庫也沒啥問題,接著一路Next,按默認來,完成安裝

下面通過一個栗子介紹Git命令行進行版本控制,然後再討論結合VSCode使用;首先新建一個項目文件夾,例如D:DesktopGitest,然後打開該文件夾,右鍵選擇Git Bash Here:

在彈出的git bash窗口中輸入以下命令配置局部用戶名與郵箱:

git config user.name xxx
git config user.email [email protected]

該配置只對當前項目有效,也可以配置全局的用戶與郵箱:

git config --global user.name xxx
git config --global user.email [email protected]

當局部用戶名與郵箱存在時優先使用局部數據,不存在時會使用全局用戶名與郵箱

在配置好用戶名與郵箱後,需要使用git init命令對項目的工作目錄進行初始化:

git init命令還會在該目錄下創建一個名為 .git 的文件夾(隱藏的),關於「分支」後面會討論

然後,在該目錄下隨便新建一個a.txt,隨意輸入一些內容,例如:

另外,git bash支持Vim,cat,echo等命令的,上述步驟也可以通過bash完成

文件a.txt創建好之後,在bash下輸入git status命令查看工作區狀態

執行之後顯示有了一個未跟蹤(Untracked)的文件,並且用紅字進行了標識,還提示你使用git add命令;那麼,接下來使用git add a.txt命令將a.txt 添加到暫存區,完成之後再次查看工作區狀態:

現在a.txt變成綠字了,並且還提示你可以使用一下命令刪除指定的暫存文件:

git rm --cached <file>

刪除就不演示了,接下來使用git commit -m "version 1"將暫存是文件進行提交,該命令格式為:

git commit -m "description" # -m "description" 是提交描述,必選

如上圖,提交完成之後,可以使用git log或者git reflog命令查看提交日誌,區別在於,git log命令顯示所有提交過的版本信息,內容更全面,也可以添加--pretty=oneline選項,那麼只會顯示版本號和提交時的備註信息,而git reflog則是查看所有分支的操作記錄,內容相對簡單

這兩個命令的輸出中都有一個HEAD,它是一個指針,指向當前分支中的某個提交,下面結合一個版本回退的栗子來解釋:

打開a.txt,再加上一行內容「this is version 2」

保存關閉文件,此時如果使用git status命令查看,會提示你有文件發生改變而未暫存(modified,不再是untracked):

上面多了一條提示,告訴你可以使用git checkout -- <file>命令撤銷文件的修改,這裡不演示,接下來重複前面的操作:

git add a.txt
git commit -m "version 2"

執行完後再次使用git reflog查看:

同樣,再向a.txt中添加一行內容,「this is version 3」以及相應的命令,並查看提交日誌:

自然,此時HEAD是指向最新的版本version 3,現在有了三個版本,可以通過git reset命令退回到任意版本,命令格式如下:

git reset --hard xxx

上面xxx是某次提交的SHA值,可以使用git或git reflog查看,reflog返回的是截取SHA開頭的部分,log是完整值,不過用哪個都是一樣的

例如現在回退到version 1,並且使用cat命令列印a.txt的內容進行對比:

git reset的結果上圖已經解釋很清楚了,而且用reflog查看日誌,該次回退也是會記錄在案的

版本回退已經進行了簡要的討論,下面討論創建分支以及合併分支,再次之前先說下分支的作用:

假設a.txt是一個軟體,現在的master(分支)是穩定的發行版,有十萬人在開發,現在又來了十萬人,讓他們負責開發一個a.txt的先行版(beta版),此時就可以創建一個beta分支,兩邊在當前版本(現在是version 1)的基礎上獨立開發,代碼互相獨立,下面看具體的栗子

上圖中使用git branch命令創建分支,git branch -v可以查看本項目的所有分支

然後,使用git checkout命令切換到beta分支,向a.txt增加一行內容「this is version 2」,然後暫存提交:

切換回master分支,查看a.txt是version 1的內容。在經過一段時間的測試後,發現beta版本穩定性不錯,而beta作為先行版,自然需要為master做貢獻,所以現在決定將beta新增的功能合併到master下,使用git merge命令:

如上圖,合併執行之後,master下a.txt的內容與beta分支一致。需要注意的是,merge命令的邏輯是我(master)合併你(beta),所以要將beta合併到master需要切換到master下執行此命令。另外,merge合併的是內容,beta分支是還在的

分支合併的栗子如上,但是有時候可能不會這麼順利,上面的栗子中只有beta對a.txt添加了內容。但是有時候master可能也需要向a.txt添加內容:

首先beta向a.txt增加了一行內容:「this is version 3 of beta」,並且正常提交。然後切換到master分支,也添加一行內容:「this is version 3 of master」

如上圖所示,master也能正常提交,因為兩邊是獨立的,自己想怎麼提交就怎麼提交。但是,此時執行git merge命令,會告訴你發生了衝突,具體內容如下圖:

並且此時查看a.txt內容會發現多出了很多東西,它會將當前(master)分支和被合併的(beta)分支內容都放上去,並且標記哪部分是誰的;還有一個改變就是,命令提示符末尾部分的括弧里由原來的(master)變為了(master|MERGING)

現在發生了版本衝突,所以master和beta兩邊二十萬人一切來協商解決問題,最後得出一個方案,將a.txt的衝突的那一條內容修改為:「this is version 3 of master and beta」:

如上圖,修改完後再次add,commit,一切正常,並且命令提示符也由(master|MERGING)變回了(master)

現在衝突解決了,並且你再次使用merge命令會告訴你已經是最新的

而且如果切換回beta分支,a.txt內容仍然不變,不受影響

以上栗子,都是基於bash下執行git命令來完成的,但是實際coding的話肯定是使用別的IDE或者編輯器,下面討論使用VSCode結合git使用

新建一個文件夾,或者將Gitest裡面的內容全部刪除(包括隱藏的.git文件夾),然後使用VSCode打開文件夾(文件夾中右鍵):

打開VSCode之後按住Ctrl+Shift+P,打開命令行,輸入git init:

如上圖,右邊源代碼管理中沒有內容,並且你輸入命令是還有提示,非常方便

命令執行完成後,可以看到下圖與上圖的變化(紅框部分),以及左下角的master表示當前處於master分支

現在,git初始化完成了,然後創建一個a.py,輸入一行代碼print("line1"),並保存,再來看源代碼管理欄的變化:

滑鼠移到a.py上會提示未跟蹤的(untracked),右邊有一個十字按鈕,可以暫存該文件(實際上就是執行了git add命令)

如上圖,暫存之後,滑鼠移動到a.py上可以取消暫存,並且上面有個√號按鈕能夠進行提交(commit),提交時必須填寫描述信息

提交完成之後,向a.py添加內容,如下:

然再次提交,此時,已經有兩次提交了,假設現在需要撤回上次的提交:

可以看到,省略號的菜單里還有很多功能,就不一一介紹了,這裡點撤銷上次提交,然後來看看變化:

如上圖,撤銷之後右邊有個暫存更改的a.py,點開會顯示一個拆分編輯器,左邊部分是前一次提交的內容,是只讀的,右邊部分會高亮顯示兩次提交不同之處,並且在左邊源代碼管理欄中點擊取消暫存的更改,就可以在這裡進行編輯

如果將a.py修改為前一次提交一樣的內容,更改就會自動消失,如下圖:

或者也可以自行試一下輸入不同的內容再保存,這裡不再演示

最後,提一下切換分支:

vscode結合git基本介紹到這裡,GUI提供的功能比較基礎,不過可以使用Ctrl+Shift+P結合手動輸入命令來實現目的,也可以下載插件擴展功能,以上的栗子都是在本地庫上的使用,下次再討論遠程庫拉取推送以及Github參與他人項目和集體開發


推薦閱讀:
相关文章