Git(IDEA版)
Git(IDEA版)
第1章Git概述
Git是一個免費的、開源的分散式版本控制系統,可以快速高效地處理從小型到大型的各種專案。
Git易於學習,佔地面積小,效能極快。它具有廉價的本地庫,方便的暫存區域和多個工作流分支等特性。其效能優於Subversion等版本控制工具。
1.1何為版本控制
版本控制是一-種記錄檔案內容變化,以便將來查閱特定版本修訂情況的系統。
版本控制其實最重要的是可以記錄檔案修改歷史記錄,從而讓使用者能夠檢視歷史版本,方便版本切換。
這裡已經有了一個版本控制的思想,但是隻是簡單做了一個副本的複製。
1.2為什麼需要版本控制
個人開發過渡到團隊協作。
1.3 版本控制工具
集中式版本控制工具
CVS、SVN(Subversion)、 .......
集中化的版本控制系統諸如CVS、SVN等,都有一個單一的集中管理的伺服器,儲存所有檔案的修訂版本,而協同工
作的人們都通過客戶端連到這臺伺服器,取出最新的檔案或者提交更新。每個人都可以在一定程度上看到專案中的其
他人正在做些什麼。而管理員也可以輕鬆掌控每個開發者的許可權,並且管理一個集中化的版本控制系統,要遠比在各
個客戶端上維護本地資料庫來得輕鬆容易。事分兩面,有好有壞。這麼做顯而易見的缺點是中央伺服器的單點故障。
如果伺服器宕機一小時,那麼在這一小時內, 誰都無法提交更新,也就無法協同工作。
雖然在這一個小時之內,你可以把程式碼下載到本地進行修改,但是你修改之後不能進行版本控制,修改之後完全沒有意義!因為沒有辦法提交更新。
分散式版本控制工具
像Git這種分散式版本控制工具,客戶端提取的不是最新版本的檔案快照,而是把程式碼倉庫完整地映象下來(本地庫)。這樣任何一處協同工作用的檔案發生故障,事後都可以用其他客戶端的本地倉庫進行恢復。因為每個客戶端的每一次檔案提取操作,實際上都是一次對整個檔案倉庫的完整備份。分散式的版本控制系統出現之後,解決了集中式版本控制系統的缺陷:
- 伺服器斷網的情況下也可以進行開發(因為版本控制是在本地進行的)。
- 每個客戶端儲存的也都是整個完整的專案( 包含歷史記錄,更加安全) 。
每個人在自己本地庫裡面做修改。
程式碼託管中心遠端庫。遠端庫裡面的程式碼永遠都是最新的。
1.4git的歷史
1.5git的工作機制
-
把編寫完的程式碼add到暫存區。
-
暫存區的程式碼一旦提交到了本地庫就會產生歷史版本,一旦產生歷史版本,這個程式碼就刪不掉了。
1.6git和程式碼託管中心
程式碼託管中心是基於網路伺服器的遠端程式碼倉庫,一般我們簡單稱為遠端庫。
- 區域網
- gitlab(基於區域網)
- 網際網路
- GitHub (外網)
- Gitee碼雲(國內網站)
第2章Git安裝
省略部分安裝步驟,需要觀看https://www.bilibili.com/video/BV1vy4y1s7k6?p=7&spm_id_from=pageDriver
git的命令列客戶端放大: 按住ctrl + 滾輪
輸入git -- version
可以檢視當前的git的版本號
第3章Git常用命令
命令名稱 | 作用 |
---|---|
git config --global user.name 使用者名稱 | 設定使用者簽名 |
git config -global user.email郵箱 | 設定使用者簽名 |
git init | 初始化本地庫 |
git status | 檢視本地庫狀態 |
git add文 件名 | 新增到暫存區 |
git commit -m“日誌資訊”檔名 | 提交到本地庫 |
git reflog | 檢視歷史記錄 |
git reset --hard 版本號 | 版本穿梭 |
這裡的郵箱並不是實際的郵箱,只是一個虛擬的郵箱,git並不會去驗證它。
這裡我們設定一下使用者名稱和郵箱,可以在我們當前目錄的使用者的資料夾下面發現一個.gitconfig
檔案
開啟之後能夠明顯的看出來剛才我們設定的內容
說明:
簽名的作用是區分不同操作者身份。使用者的簽名信息在每--個版本的提交資訊中能夠看
到,以此確認本次提交是誰做的。Git首次安裝必須設定一下使用者簽名,否則無法提交程式碼。
※注意:這裡設定使用者簽名和將來登入GitHub (或其他程式碼託管中心)的賬號沒有任何關係。這裡只是代表我們本地git的一個客戶端!
3.2初始化本地庫
如果你要初始化這個本地倉庫首先需要獲得這個本地庫的管理權。
新增暫存區:
git init
這裡面的目錄一般情況下不要去修改它,如果修改之後可能會導致git無法使用。
3.3檢視本地庫資訊
3.3.1首次檢視(工作區沒有任何檔案)
因為這裡的.git檔案是一個隱藏檔案,所以輸入ll顯示檔案數目為0
但是當我們進到這個本地庫裡面,可以發現這個本地庫裡面的確是生成了檔案的
檢視git 現在的狀態
使用命令 git status
3.3.2新增檔案
在git裡面可以隨便使用linux的命令裡面的,因為他們都是Linus開發的。
提交檔案git add 檔名
3.2.3再次檢視(檢測到沒有追蹤的檔案)
這裡輸入命令 git add 檔名代表這個檔案被存到了暫存區裡面
- Uinx/Linux:採用換行符LF表示下一行(LF:LineFeed,中文意思是換行);
- Dos和Windows:採用回車+換行,CRLF表示下一行(CRLF:CarriageReturnLineFeed,中文意思是回車換行);
如果想從暫存區裡面刪掉hello.txt就使用命令git rm --cached hello2.txt
這個刪除只是將暫存區裡面的檔案刪除了,並沒有刪除我們電腦檔案中的這個檔案。但是這次我們再次git status之後就會顯示我們沒有追蹤過它了。
3.3提交本地庫
3.3.1將暫存區的檔案提交到本地庫
基本語法
git commit -m "日誌資訊" 檔名
再次提交之後顯示
3.4修改檔案
當我們修改了檔案再次檢視本地庫的狀態可以看到這個檔案被修改了modified
然後輸入 git add hello2.txt將檔案新增到暫存區,但是隻新增到暫存區不行還需要新增到本地庫。git commit -m就可以新增到本地庫了。
這裡注意:因為git是按照行來維護檔案的,因為修改了一行並沒有辦法去表達出來,只能把我們修改之前的那一行給我們刪掉然後我們新增的那一行再增加出來,所以這裡會顯示
1 file changed, 2 insertions(+), 1 deletion(-)
這裡提交完成之後我們再次檢視本地庫資訊,可以發現這裡又是乾淨的了!
3.5檢視日誌
git reflog
想要檢視更加詳細的日誌資訊就輸入:
git log
這樣可以檢視提交日誌的詳細資訊。
並且這個命令檢視到的版本號是完整的版本號,我們之前在reflog裡面得到的版本號是精簡版的版本號,只有前七位的版本號。
3.6版本穿梭
首先使用git reflog可以檢視到有多個版本號,這個我們可以知道這些檔案有幾個版本號
通過這個版本號可以穿梭回指定id的版本
點開.git 資料夾的內容,可以發現一個head檔案,開啟這個head檔案可以看出來
當前指標指向我們當前的目錄,我們當前在master目錄下面,我們現在所在master的哪個分支版本我們需要檢視.git/refs/heads
這個目錄可以找到master這個目錄:
這裡可以看到我們現在的版本號是
綜上所述可以看出我們現在所在master這個分支,而master這個分支又指向了7bfb24這個版本。
git切換版本,並不是複製貼上副本,而是在記憶體裡面存了許多日誌資訊,底層其實是移動的HEAD指標來切換不同的版本資訊,具體原理如下圖所示:
第4章Git分支操作
4.1什麼是分支
在版本控制過程中,同時推進多個任務,為每個任務,我們就可以建立每個任務的單獨分支。使用分支意味著程式設計師可以把自己的工作從開發主線上分離開來,開發自己分支的時候,不會影響主線分支的執行。對於初學者而言,分支可以簡單理解為副本,一個分支就是一個單獨的副本。(分支底層其實也是指標的引用)。
4.2分支的優點
同時並行推進多個功能開發,提高開發效率。
各個分支在開發過程中,如果某一個分支開發失敗, 不會對其他分支有任何影響。失敗的分支刪除重新開始即可。
4.3分支的操作
命令名稱 | 作用 |
---|---|
git branch 分支名 | 建立分支 |
git branch -v | 檢視分支 |
git checkout 分支名 | 切換分支 |
git merge 分支名 | 把指定的分支合併到當前分支上 |
檢視分支名
git branch -v
建立分支hot-fix:
git branch hot-fix
此時這時候檢視分支可以發現有兩個分支
修改分支切換到hot-fix:
git checkout hot-fix
這次我們在hello2.txt上進行修改,可以看到這裡
進行新增和提交
我們可以明顯的看到這個head現在就是指向了hot-fix裡面的這個版本。
合併分支