這兩天在學習git版本控制工具,在這裡記錄一下。git的安裝就不提了,可以去官網下載下傳:https://git-scm.com/。
一、git工作原理
- git在本地分為三個區本地庫、暫存區和工作區。
- 工作區的代碼要送出首先需要使用git add指令添加到暫存區,然後使用git commit指令送出到本地庫。
- 暫存區的作用主要是臨時存儲,用于版本控制,是以送出前添加到暫存區非常重要。
- 可以直接git commit送出,但是送出後版本無法恢複。
本地倉庫與遠端倉庫的關系如上。
- 本地庫2想要擷取遠端倉庫的代碼,可以使用git clone指令覆寫到本地。
- 本地庫2修改完代碼後想要同步到遠端倉庫,使用git push指令,需要加入團隊。
- 本地庫1使用git pull指令拉取遠端倉庫代碼合并到本地倉庫,修改完成後git push推送到遠端倉庫合并。
了解到這些之後就可以試着練練手了。
二、Git的相關指令
首先切換到項目檔案夾下,右鍵打開git指令視窗。
1、設定簽名
在使用git之前需要先設定一下簽名,簽名其實就是為了區分是誰操作的一個辨別。包括使用者和郵箱。
簽名分為兩個級别:項目級别和系統使用者級别。
- 項目級别:隻對目前項目生效
- 系統使用者級别:相當于全局,隻要不切換系統使用者一直生效。
- 優先級:項目級别>系統使用者級别
- 二者必須設定其一,否則git無法區分是誰進行的操作,也就無法進行版本控制。
# 項目級别
git config user.name zhangsan
git config user.email [email protected]
# 系統使用者級别
git config --global user.name zhangsan
git config --global user.email [email protected]
其中項目級别配置完後儲存在項目下 .git/config檔案中。
系統使用者級别配置儲存在使用者目錄下的.gitconfig檔案中。
cat指令用于列印檔案内容
~代表使用者根目錄,也就是通常說的c:/user/administrator/
簽名配置好以後就可以開始進行git的相關操作了。
2、初始化本地倉庫
git init
指令執行後會生成.git檔案夾,這裡面包含一系列本地倉庫相關的檔案,不要删除或修改。
3、檢視狀态指令
git status
第二行表示工作區,目前沒有檔案可以送出;第三行表示暫存區沒有檔案可送出。
4、工作區添加到暫存區
建立檔案随便寫點東西,然後使用git status指令檢視狀态。
echo -e 'gaahaha\n gahhopkmm\n' >> test.txt
git status
發現工作區有一個标紅的檔案可送出,提示我們使用git add 指令。
echo指令是列印字元,這裡的意思是追加 gaahaha\n gahhopkmm\n 到test.txt檔案中。>>表追加,>表覆寫,參數-e表示解釋轉義字元。
使用git add指令添加,然後使用git status檢視狀态。
git add test.txt
git status
這時候發現工作區已經沒有檔案可以送出了,暫存區多了一個綠色的檔案是我們剛送出上來的。而且提示我們如果想要恢複之前的狀态可以使用git rm --cached指令。
5、暫存區送出到本地倉庫
使用git add添加到暫存區後緊接着就可以使用git commit指令送出到本地倉庫了。
git commit test.txt
上面的指令執行後會出現這樣一個界面,這是vim編輯器,送出指令執行後會預設打開vim編輯器,這是在安裝git的時候選擇的,你可能沒注意,但确實有這樣一步。
如果你不想打開這個編輯器這樣來使用:
這裡要求送出的時候添加一些備注,如果每一次送出都沒有備注的話,可以想象多難找,是以git要求必須添加備注,否則添加失敗,如圖,送出被終止:
重新執行git commit指令,按下 i 進入編輯模式,編輯完成後按Esc退出到指令模式,然後按:編輯指令,輸入wq儲存并退出,Enter鍵出現下圖即送出成功。
可以對應來看一下,大概就是說,根送出也就是第一個版本,版本号77ee20b開頭,備注this is my first commit,改變1個檔案,3行内容。第一行的警告也是安裝的時候有一個選項,送出的時候會将換行結尾符從windows的LF格式轉換成CRLF格式,但本地不會變,不會影響自己的操作。
執行git status指令檢視狀态,沒有需要送出的内容。
這就是一次完整的從工作區送出到本地庫的過程。
6、檢視日志指令
每一次送出過後都會生成一個曆史版本,對應着有相應的日志進行記錄。檢視日志使用這個指令:
git log
為了友善示範我又修改送出了一次,這個指令檢視log會生成很詳細的資訊如上圖,其中帶有(HEAD -> master)的就是目前的版本,commit後的一長串就是版本号,如果需要回退到某個版本時會用到。
當版本過多時,這樣的顯示就顯得太多了,而且一頁顯示不下幾個版本的資訊,這個時候可以加上參數–pretty=oneline。這種方式隻顯示曆史版本。
git log --pretty=oneline
這個指令隻會顯示版本号和送出資訊,有時候查找起來會更加的友善。什麼?指令太長了,那就換種寫法。
git log --oneline
這樣的寫法隻會顯示版本号的前7位和備注資訊,事實上,版本控制也隻需要前七位就可以了。這種方式也隻顯示曆史版本。
還有一種寫法用于顯示版本距離。
git reflog
這種方式和–oneline的方式相比就對了一個版本距離的問題,其中HEAD@{}就是版本距離,就是指距離目前版本的版本個數。這種方式會顯示所有的版本,包括目前版本之前的版本。
7、版本回退
當我們需要回退版本的時候可以使用git reset指令。
# 通過版本号回退,可以跳到任意版本
git reset --hard 版本号
# 使用HEAD指針回退,隻能退到之前的版本,曆史版本,一個^代表一個版本
git reset --hard HEAD^...
# 回退N個版本
git reset --hard HEAD~[N]
除了–hard參數,還有–soft和–mixed參數。
–soft:僅在本地庫移動指針,暫存區被凸顯出來。
–mixed:移動本地庫和暫存區的指針,工作區被凸顯出來。
–hard:三個區保持同步移動。
8、比較檔案指令
# 比較工作區和暫存區的檔案
git diff [檔案名]
# 比較某個曆史版本和本地庫的檔案
git diff [版本号] [檔案名]
# 不帶檔案名比較所有檔案
git diff
git diff [版本号]
9、分支管理
為什麼要分支?
同時并行推進多個功能開發,提高開發效率。
試錯,如果開發失敗,不會退其他分支造成影響,删除分支重新開始即可。
分支指令
# 建立分支
git branch [分支名]
# 檢視分支
git branch -v
# 切換分支
git checkout [分支名]
# 合并分支,将某分支合并到目前分支
git merge [分支名]
當執行merge指令時可能會遇到沖突,例如合并的兩個分支修改了同一檔案的同一行,git無法自動取舍,會将沖突的區域都加入到檔案中做上标記并提示,如下圖:
打開檔案如下:
git幫我們标記出了沖突的位置,我們需要人為的進行取舍。修改完檔案後執行git status檢視狀态。
提示我們有沖突需要解決,使用git add指令,那我們就執行git add指令,再次執行git status檢視狀态。
提示沖突已經被修複啦,但仍然在合并中,提示我們用git commit指令結束合并。這裡要注意,不能添加檔案名,否則會報錯。
執行指令git commit 後沖突解決。
以上就是我今天所學的所有内容啦,後面會繼續學習跟github相關的操作。推薦大家去B站聽尚矽谷的課程,講的每一門技術都特别細緻,讓人印象特别深刻。大家加油!!!