【Java學習筆記(五十三)】之Git簡介,Git常用命令

開發小鴿 發表於 2020-10-17

本文章由公號【開發小鴿】釋出!歡迎關注!!!


老規矩–妹妹鎮樓:

【Java學習筆記(五十三)】之Git簡介,Git常用命令

一. Git

(一) Git與SVN的對比

1. SVN

       SVN是集中式版本控制系統,版本庫是集中放在中央伺服器上的,開發人員只能從中央伺服器中下載最新的版本進行開發,開發完畢後,需要將自己開發的程式碼提交到中央伺服器中。

集中式版本控制工具缺點:

       伺服器單點故障:當伺服器出現故障時,所有的開發需要等待伺服器的故障排除後才能繼續進行。容錯性很差

2. Git

       Git是分散式版本控制系統(Distributed Version Control System,DVCS),分為兩種型別的倉庫:本地倉庫和遠端倉庫。本地倉庫是開發人員自己電腦上的Git倉庫,遠端倉庫是遠端伺服器上的Git倉庫。

       當開發人員開發完畢後,可以通過Commit命名將程式碼提交到本地倉庫上;若想將程式碼提交到遠端倉庫中,使用Push推送命令推送到遠端倉庫中;若想從遠端倉庫中下載程式碼到本地倉庫,使用Pull拉取命令;若想直接將遠端倉庫複製到本地,就使用Clone克隆命令。

(二) Git工作流程

Git的工作流程如下所示:

       1. 從遠端倉庫中通過Clone克隆程式碼到本地倉庫中。

       2. 開發人員從本地倉庫中通過checkout獲取程式碼後進行程式碼修改。

       3. 開發人員修改完程式碼後,想要將程式碼提交到本地倉庫中,首先將程式碼Add提交到暫存區,之後暫存區會將程式碼Commit到本地倉庫中。

       4. 提交到本地倉庫後,本地倉庫儲存著修改的歷史版本。

       5. 當需要將程式碼上傳到遠端倉庫時,可以通過Push從本地倉庫推送程式碼到遠端倉庫中。

       6. 若想直接從遠端倉庫中獲取程式碼,則可以通過Pull拉取程式碼到工作區中,不經過本地倉庫。

二. Git程式碼託管服務

(一) 常用的Git程式碼託管服務

       通常我們是藉助網際網路上提供的一些程式碼託管服務來搭建Git遠端倉庫,其中比較常見的有GitHub,碼雲,GitLab等。

       GitHub是一個面向開源即私有軟體專案的託管平臺,因為只支援Git作為唯一的版本庫格式進行託管,因此命名為GitHub;碼雲是國內的一個程式碼託管平臺;GitLab是一個用於倉庫管理系統的開源專案,使用Git作為程式碼管理工具,並在此基礎上搭建起來的web服務。

(二) 使用碼雲進行程式碼託管

1. 建立新倉庫

       登入碼雲,建立新的倉庫,每個Git遠端倉庫都會對應一個網路地址,可以店家克隆/下載按鈕彈出視窗,視窗中就是Git遠端倉庫對應的網路地址。

2. 邀請其他使用者成為倉庫成員

       專案的開發是由多人共同完成的,為了使多個參與者都有許可權操作遠端倉庫,需要邀請其他專案參與者成為當前倉庫的成員。

三. Git常用命令

(一) 環境配置

       安裝完Git後首先要設定使用者名稱和email名稱,每次Git提交時都會使用該使用者名稱和email地址進行驗證。

1. 設定使用者資訊

git config –global user.name “mrwxx”
git config –global user.email [email protected].cn

       git config 是用於Git配置的命令, --global代表著這是全域性的, user.name代表著使用者名稱稱,user.email代表著email地址。

2. 檢視配置資訊

以列表形式顯示所有的Git配置:

git config –list

顯示單個Git配置:

git config user.name

       當我們手動設定完Git的配置後,這些配置資訊會儲存在本地使用者的目錄下,如本地的C:\Users\Mr.wmxx下面,有一個.gitconfig檔案,檔案中儲存著剛剛配置的資訊:

[user]
	name = mrwxx
	email = [email protected].cn

(二) 獲取Git倉庫

       獲取Git倉庫有兩種方式,一種是在本地初始化一個Git倉庫,另一種是從遠端倉庫中克隆一個。

1. 本地初始化Git倉庫

       在本地初始化一個Git倉庫,就是將本地的一個資料夾作為Git倉庫,在某個資料夾下右鍵進入Git Bash,使用git init命令初始化一個Git倉庫。這樣,該資料夾下會生成一個.git隱藏資料夾。

2. 克隆遠端倉庫

       克隆遠端倉庫到本地中,在本地的資料夾下進入Git Bash,使用git clone 命令,後面加 遠端倉庫的地址即可。

git clone https://gitee.com/mrxx/repos.git

(三) 工作目錄,暫存區以及版本庫

1. 版本庫

       前面所說的.git資料夾就是版本庫,版本庫中儲存了很多的配置資訊,日誌資訊和檔案版本資訊。

2. 工作目錄(工作區)

       包含.git資料夾的目錄就是工作目錄,主要用於存放開發的程式碼。

3. 暫存區

       .git資料夾中的index檔案就是暫存區,暫存區用於臨時儲存修改的檔案。

       開發人員在工作區進行開發,開發修改後的程式碼通過 git add命令傳到暫存區,再通過git commit 命令提交到版本庫中。

(四) Git工作目錄下檔案的兩種狀態

       Git工作目錄下的檔案存在兩種狀態,這些檔案的狀態會隨著Git命令的執行而發生變化。

1. untracked

       未跟蹤狀態,說明它未被納入版本控制中。

2. tracked

       已跟蹤狀態,說明它已經被Git納入版本控制了,且已跟蹤狀態又分為三種狀態:

(1) Unmodified

       未修改狀態,檔案沒有被修改過。

(2) Modified

       已修改狀態,檔案已經被修改過了。

(3) Staged

       已暫存狀態,檔案已經放入暫存區中、

(五) 本地倉庫操作

1. git status

       在工作區中使用git status檢視工作區中檔案的狀態。
       使用 git status -s使得輸出結果更加簡潔


2. git add

       git add命令將未跟蹤的檔案加入暫存區中,那麼該檔案的狀態就會變為已跟蹤中的已暫存狀態。

git add hello.txt

3. git reset

       git reset命令將暫存區中的檔案取消暫存,那麼該檔案的狀態就會發生變化,變為未跟蹤。

git reset hello.txt

4. git commit

       要想將程式碼提交到本地倉庫中,必須通過暫存區,即先將程式碼通過git add命令存到暫存區中,再通過git commit命令將程式碼提交到本地倉庫中。

git commit -m “init hello.txt”

       -m代表著日誌,每次上傳程式碼到本地倉庫中,必須要寫日誌資訊,如果不加-m,它會彈出一個編輯器讓我們進行編寫。

5. git rm

       git rm命令將檔案從工作區中刪除,但是,本地倉庫中的該檔案並沒有被刪除,要想刪除,需要提交到本地倉庫。提交之前我們需要將該檔案新增到暫存區中,有趣的是,使用git rm命令刪除該檔案後,該檔案就自動被新增到了暫存區中,因此我們可以直接使用git commit命令提交就可以了,本地倉庫中的該檔案就被刪除了。

6. .ignore檔案

       工作區中有一些檔案是不需要納入Git的管理的,也不希望他們總是出現在未跟蹤檔案列表中,因此,我們可以在工作區中建立一個名為 .gitignore的檔案,在該檔案中列出需要忽略的檔案模式,如下所示:

*.a : 代表著忽略所有的.a格式檔案

!lib.a : 代表著除了lib.a之外

/TODO : 代表著忽略TODO檔案

build/ : 代表著忽略build資料夾下的所有檔案

doc/*.txt : 代表著忽略doc資料夾下的所有txt檔案

doc/**/*.txt : 代表和忽略doc目錄下的所有子目錄的txt檔案

7. git log

       通過git log命令檢視日誌記錄,按Enter鍵向下瀏覽記錄,按q鍵 退出到命令列。

(六) 遠端倉庫操作

1. git remote

       當一個本地的工作空間和遠端倉庫建立了聯絡後,通過git remote命令檢視已經配置的遠端倉庫伺服器,它會列出指定的每一個遠端伺服器的簡寫,如果已經克隆了遠端倉庫,那麼至少有一個origin,這是Git克隆的遠端倉庫伺服器的預設名字。

       想要更加詳細的資訊,可以在git remote命令後面加上 -v,可以顯示遠端倉庫伺服器的地址:

git remote -v

       若是想檢視某一個遠端倉庫伺服器的資訊,則使用git remote show 命令後面加上該倉庫的簡寫即可:

git remote show origin

2. git remote add

       通過git remote add命令為本地新增遠端倉庫,命令後面首先加上 遠端倉庫的簡寫,然後是 遠端倉庫的地址:

git remote add origin https://gitee.com/mtwxx/repos.git

       我們可以為本地新增多個遠端倉庫。

3. git clone

       git clone命令負責從遠端倉庫中進行拷貝,Git克隆的是該Git倉庫伺服器上幾乎所有資料(包括日誌資訊,歷史記錄等)。當執行git clone 命令時,預設配置下遠端Git倉庫中的每一個檔案的每一個版本都會被拉取下來。

git clone https://gitee.com/mrwxx/repo.git

4. git remote rm

       通過git remote rm 命令移除本地連線的一個遠端倉庫,命令後面跟遠端倉庫的簡稱。這裡只是在本地中移除遠端倉庫的記錄,不會影響到真正的遠端倉庫。

git remote rm origin

5. git fetch

       git fetch是從遠端倉庫獲取最新版本到本地倉庫中,不會自動地merge,不會自動合併到本地倉庫中,即不會直接顯示在本地倉庫中。

git fetch origin master

       origin是遠端倉庫的簡稱,master是遠端倉庫的分支。

       我們還要通過 git merge 來合併程式碼到工作區中,後面接遠端倉庫的分支,如:

git merge origin/master

6. git pull

       git pull也是從遠端倉庫獲取最新版本到本地倉庫,但是會自動merge,合併程式碼。

git pull origin master

       注意:如果當前的本地倉庫是本地建立的倉庫,且倉庫中存在檔案,此時再從遠端倉庫中拉取檔案時會報錯(fatal:refusing to merge unrelated histories),這是因為原有的檔案與拉取的檔案無法合併。可以通過在git pull命令後新增引數 –allow-unrelated-histories來解決

git pull origin master –allowed-histories-histories

7. git push

       通過git push命令將本地的程式碼推送到遠端倉庫中,後面接遠端倉庫的簡寫,以及分支名:

git push origin master

       這個操作一般都是在我們對之前下載的程式碼進行修改之後,修改後的程式碼是沒有進入本地倉庫的,因此我們首先要將修改後的程式碼提交到本地倉庫,而提交到本地倉庫首先要存到暫存區,使用git add 新增到暫存區或者 git commit -a命令直接提交到本地倉庫中。在這之後,就可以執行git push命令推送新的程式碼到遠端倉庫了。

(七) Git分支

       所有的版本控制系統都有分支,使用分支意味著可以把工作從開發主線上分離開來,以免影響開發主線。Git的master分支不是特殊的,之所以每個倉庫都有master分支,是因為git init會預設建立它。

1. 檢視分支

git branch 列出本地所有分支

git branch -r 列出所有遠端分支

git branch -a 列出本地和遠端的所有分支

2. 建立分支

git branch a 建立a分支

3. 切換分支

       我們通過git checkout來切換分支,命令列中會顯示目前使用的分支:

git checkout a 切換到a分支

4. 推送到遠端倉庫分支

       將本地的分支推送到遠端倉庫的分支中,如推送到origin倉庫的b1分支中:

git push origin b1

5. 合併分支

       通過git merge命令合併兩個分支,如我們要將b3分支合併到master分支上,那麼,我們需要切換到master分支中,使用git merge b1命令合併分支。如果在兩個不同的分支中,對同一個檔案同一個部分進行了不同的修改,Git就合併它們,會提示檔案衝突。此時我們需要開啟衝突的檔案並修復衝突內容,最後執行git add命令將程式碼存到暫存區中。

6. 刪除分支

       若要刪除本地的分支,可以通過git branch -d 後面接分支的名稱來刪除該分支。若在該分支中已經進行了修改,且沒有推送到遠端倉庫中,那麼使用上面的命令並不會刪除分支,因為直接刪除會有丟失修改資料的風險。若堅持要直接刪除,將-d引數改為-D引數即可刪除。

       若要刪除遠端倉庫中的分支,可以使用git push origin -d branchName,origin是遠端倉庫的簡稱,branchName是分支的名稱。

(八) Git標籤

       Git可以給歷史中的某一個提交打上標籤,以示重要,人們會使用這個功能來標記釋出節點。標籤指的是某個分支某個特定時間點的狀態,通過標籤,可以很方便地切換到標記時的狀態。

1. git tag

       列出已有的標籤

2. git show [tag]

       檢視tag資訊

3. git tag [tagName]

       新建一個tag標籤

4. git push [remote] [tag]

       將標籤推送至遠端倉庫,提交指定tag
如: git push origin v0.1

5. git checkout -b [branch] [tag]

       檢出標籤,新建一個分支,將該分支指向某個tag

6. git tag -d [tag]

       刪除本地標籤,

7. git push [remote] :refs/tags/[tag]

       刪除遠端倉庫的tag,:ref/tags是固定寫法:

git push origin :refs/tags/[tag]