常用的Git命令詳解

一、Git是什麼?

Git是目前世界上最先進的分佈式版本控制系統。
工作原理 / 流程:
在這裏插入圖片描述

  • Workspace:工作區
  • Index / Stage:暫存區
  • Repository:倉庫區(或本地倉庫)
  • Remote:遠程倉庫

二、SVN與Git的最主要的區別?

SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而幹活的時候,用的都是自己的電腦,所以首先要從中央服務器哪裏得到最新的版本,然後幹活,幹完後,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,如果在局域網還可以,帶寬夠大,速度夠快,如果在互聯網下,如果網速慢的話,就納悶了。

Git是分佈式版本控制系統,那麼它就沒有中央服務器的,每個人的電腦就是一個完整的版本庫,這樣,工作的時候就不需要聯網了,因爲版本都是在自己的電腦上。既然每個人的電腦都有一個完整的版本庫,那多個人如何協作呢?比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。

三、常見的命令

1、git status

git status命令用於顯示工作目錄和暫存區的狀態。使用此命令能看到那些修改被暫存到了, 哪些沒有, 哪些文件沒有被Git tracked到。
在這裏插入圖片描述

2、git add .

如果要將單個文件加入到暫存區,可採用如下類似代碼:
git add + 文件名

講單個文件去除暫存區,可採用如下代碼:
git reset + 文件名
在這裏插入圖片描述
reset data/:去除data文件下的所有包含的文件
去除單個文件:後面跟上文件名

git add . :他會監控工作區的狀態樹,使用它會把工作時的所有變化提交到暫存區,包括文件內容修改(modified)以及新文件(new),但不包括被刪除的文件。

3、git commit -m + 註釋信息

將在暫存區的文件提交上去,註釋信息可以對本次提交內容進行說明

4、git log

git log命令顯示從最近到最遠的顯示日誌
在這裏插入圖片描述

5、git reset --hard HEAD^

現在我想使用版本回退操作,我想把當前的版本回退到上一個版本,要使用什麼命令呢?可以使用如下2種命令,第一種是:

     git reset --hard HEAD^ 

那麼如果要回退到上上個版本只需把HEAD^ 改成 HEAD^^ 以此類推。
那如果要回退到前100個版本的話,使用上面的方法肯定不方便,我們可以使用下面的簡便命令操作:git reset --hard HEAD~100 即可。

也可以通過版本號回退,使用命令方法如下:

git reset --hard 版本號

四、理解工作區與暫存區的區別?

工作區:就是你在電腦上看到的目錄,比如目錄下testgit裏的文件(.git隱藏目錄版本庫除外)。或者以後需要再新建的目錄文件等等都屬於工作區範疇。

版本庫(Repository): 工作區有一個隱藏目錄.git,這個不屬於工作區,這是版本庫。其中版本庫裏面存了很多東西,其中最重要的就是stage(暫存區),還有Git爲我們自動創建了第一個分支master,以及指向master的一個指針HEAD。

我們前面說過使用Git提交文件到版本庫有兩步:

第一步:是使用 git add 把文件添加進去,實際上就是把文件添加到暫存區。

第二步:使用 git commit 提交更改,實際上就是把暫存區的所有內容提交到當前分支上。

6、Git撤銷修改和刪除文件操作

1、撤銷修改:

比如我現在在readme.txt文件裏面增加一行 內容爲555555555555,我們先通過命令查看如下:
在這裏插入圖片描述
在我未提交之前,我發現添加5555555555555內容有誤,所以我得馬上恢復以前的版本,現在我可以有如下幾種方法可以做修改:

第一:如果我知道要刪掉那些內容的話,直接手動更改去掉那些需要的文件,然後add添加到暫存區,最後commit掉。

第二:我可以按以前的方法直接恢復到上一個版本。使用

git reset --hard HEAD^

但是現在我不想使用上面的2種方法,我想直接想使用撤銷命令該如何操作呢?首先在做撤銷之前,我們可以先用 git status 查看下當前的狀態。如下所示:
在這裏插入圖片描述
可以發現,Git會告訴你,git checkout – file 可以丟棄工作區的修改,如下命令:

git checkout – readme.txt,如下所示:
在這裏插入圖片描述
命令 git checkout --readme.txt 意思就是,把readme.txt文件在工作區做的修改全部撤銷,這裏有2種情況,如下:

1.readme.txt自動修改後,還沒有放到暫存區,使用 撤銷修改就回到和版本庫一模一樣的狀態。

2.另外一種是readme.txt已經放入暫存區了,接着又作了修改,撤銷修改就回到添加暫存區後的狀態。

對於第二種情況,我想我們繼續做demo來看下,假如現在我對readme.txt添加一行 內容爲6666666666666,我git add 增加到暫存區後,接着添加內容7777777,我想通過撤銷命令讓其回到暫存區後的狀態。如下所示:
在這裏插入圖片描述
注意:命令git checkout – readme.txt 中的 – 很重要,如果沒有 – 的話,那麼命令變成創建分支了。

2. 刪除文件。

假如我現在版本庫testgit目錄添加一個文件b.txt,然後提交。如下:
在這裏插入圖片描述
如上:一般情況下,可以直接在文件目錄中把文件刪了,或者使用如上rm命令:rm b.txt ,如果我想徹底從版本庫中刪掉了此文件的話,可以再執行commit命令 提交掉,現在目錄是這樣的
在這裏插入圖片描述
只要沒有commit之前,如果我想在版本庫中恢復此文件如何操作呢?

可以使用如下命令 git checkout – b.txt,如下所示:
在這裏插入圖片描述
再來看看我們testgit目錄,添加了3個文件了。如下所示
在這裏插入圖片描述

7、git push origin master

從現在起,只要本地作了提交,就可以通過如下命令:

git push origin master

把本地master分支的最新修改推送到遠程代碼庫。

8、git branch

git checkout 命令加上 –b參數表示創建並切換,相當於如下2條命令

git branch dev

git checkout dev
在這裏插入圖片描述
總結創建與合併分支命令如下:

查看分支:git branch

創建分支:git branch name

切換分支:git checkout name

創建+切換分支:git checkout –b name

合併某分支到當前分支:git merge name

刪除分支:git branch –d name

9、git stash

git stash命令的作用就是將目前還不想提交的但是已經修改的內容進行保存至堆棧中,後續可以在某個分支上恢復出堆棧中的內容。這也就是說,stash中的內容不僅僅可以恢復到原先開發的分支,也可以恢復到其他任意指定的分支上。git stash作用的範圍包括工作區和暫存區中的內容,也就是說沒有提交的內容都會保存至堆棧中。

1 )、git stash

能夠將所有未提交的修改(工作區和暫存區)保存至堆棧中,用於後續恢復當前工作目錄。

2)、git stash save

作用等同於git stash,區別是可以加一些註釋

3)、git stash list

查看當前stash中的內容

4)、 git stash pop

將當前stash中的內容彈出,並應用到當前分支對應的工作目錄上。

注:該命令將堆棧中最近保存的內容刪除(棧是先進後出)

5)、 git stash apply

將堆棧中的內容應用到當前目錄,不同於git stash pop,該命令不會將內容從堆棧中刪除,也就說該命令能夠將堆棧的內容多次應用到工作目錄中,適應於多個分支的情況。

可以使用git stash apply + stash名字(如stash@{1})指定恢復哪個stash到當前的工作目錄。

6)、git stash drop + 名稱

從堆棧中移除某個指定的stash

7)、git stash clear

清除堆棧中的所有 內容

8)、git stash show

查看堆棧中最新保存的stash和當前目錄的差異。

9)、git stash branch

從最新的stash創建分支。
應用場景:當儲藏了部分工作,暫時不去理會,繼續在當前分支進行開發,後續想將stash中的內容恢復到當前工作目錄時,如果是針對同一個文件的修改(即便不是同行數據),那麼可能會發生衝突,恢復失敗,這裏通過創建新的分支來解決。可以用於解決stash中的內容和當前目錄的內容發生衝突的情景。

發生衝突時,需手動解決衝突。

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