git checkout命令詳解

在實際應用中,git checkout是最爲常見命令之一。html

此命令參數衆多,功能多樣,但有些功能可能整個職業生涯都不會用到,因此本文只介紹最爲實用的部分。git

若是想要了git checkout命令全部功能,能夠閱讀幫助文檔:spa

 

[Shell] 純文本查看 複製代碼翻譯

13d

$ git checkout --helpcode

一.命令概述:htm

衆多教程將此命令翻譯成"檢出",好比檢出某分支。blog

因爲本人英文水平有限(良心話)不能理解它的含義,固然這也不是咱們所深究的重點。教程

做用綜述以下:ci

(1).切換或者新建分支。

(2).將暫存區或者指定commit內容覆蓋到工做區。

此命令整體功能大體上述兩條,固然因爲參數的不一樣,功能在細節上會有所不一樣。

二.切換或者新建分支:

首先查看一下當前項目的分支:

 

[Shell] 純文本查看 複製代碼

1

$ git branch

代碼運行效果截圖以下:

a:3:{s:3:\"pic\";s:43:\"portal/201807/16/002406pvkz0yaekvihvzlk.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

當前位於Develop分支,下面切換到master分支:

 

[Shell] 純文本查看 複製代碼

1

$ git checkout master

代碼運行效果截圖以下:

a:3:{s:3:\"pic\";s:43:\"portal/201807/16/002619ol2zppw2k0o66ek4.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

能夠看到如今已經切換到master分支。

默認狀態下,新建分支並不能自動切換到此新分支下,代碼以下:

 

[Shell] 純文本查看 複製代碼

1

$ git branch newBr

新建newBr分支,但默認不會切換到此分支,圖示以下:

a:3:{s:3:\"pic\";s:43:\"portal/201807/16/002727vy8edhkc26cwvc22.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

咱們也能夠在新建分支的同時切換到此分支:

 

[Shell] 純文本查看 複製代碼

1

$ git checkout -b newBr2

代碼運行效果截圖以下:

a:3:{s:3:\"pic\";s:43:\"portal/201807/16/003043biaoaj7hg3ah1sss.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

上述代碼實現新建newBr2分支,並切換到此分支。

三.用暫存區或者指定commit提交內容覆蓋工做區內容:

(1).用暫存區內容覆蓋工做區內容:

當前工做區readme.txt文件的內容以下:

 

[HTML] 純文本查看 複製代碼

1

2

3

螞蟻部落一

螞蟻部落二

螞蟻部落三

下面再添加一行:

 

[HTML] 純文本查看 複製代碼

1

2

3

4

螞蟻部落一

螞蟻部落二

螞蟻部落三

螞蟻部落四

將其提交到暫存區,代碼以下:

 

[Shell] 純文本查看 複製代碼

1

$ git add readme.txt

再給工做區readme.txt文件添加一行:

 

[HTML] 純文本查看 複製代碼

1

2

3

4

5

螞蟻部落一

螞蟻部落二

螞蟻部落三

螞蟻部落四

螞蟻部落五

如今後悔了,想要將暫存區內容恢復到工做區,代碼以下:

 

[Shell] 純文本查看 複製代碼

1

$ git checkout readme.txt

以上代碼能夠將暫存區中的readme.txt文件還原到工做區,若是要還原多個文件,那麼使用空格分隔:

 

[Shell] 純文本查看 複製代碼

1

$ git checkout readme.txt antzone.txt

若是要還原全部文件,checkout後面跟點便可(.):

 

[Shell] 純文本查看 複製代碼

1

$ git checkout .

特別說明:若是checkout後面是文件名稱,如下寫法更爲穩妥:

 

[Shell] 純文本查看 複製代碼

1

$ git checkout -- readme.txt

文件名稱前面有兩個橫槓,而且中間採用空格分隔(不然報錯)。此種方式能夠防止Git出現誤判,加入暫存區有一個文件名爲ant(沒有後綴名),剛好當前項目也有有個名爲ant的分支,這個時候Git會優先將ant當作分支處理,因而就有可能致使錯誤。

(2).用指定commit提交的內容覆蓋工做區:

當前工做區readme.txt文檔的內容是:

 

[HTML] 純文本查看 複製代碼

1

2

3

4

螞蟻部落一

螞蟻部落二

螞蟻部落三

螞蟻部落四

再來看一下提交歷史,代碼以下:

 

[Shell] 純文本查看 複製代碼

1

$ git log --oneline

運行效果截圖以下:

a:3:{s:3:\"pic\";s:43:\"portal/201807/16/003531aybs4gmlebecm7bm.jpg\";s:5:\"thumb\";s:0:\"\";s:6:\"remote\";N;}

下面用c1提交的內容進行覆蓋,代碼以下:

 

[Shell] 純文本查看 複製代碼

1

$ git checkout 6c89271 -- readme.txt

代碼運行後,工做區readme.txt文檔內容變爲:

 

[HTML] 純文本查看 複製代碼

1

螞蟻部落一

checkout後面的參數不必非要是sha-1值,只要可以惟一標識指定提交便可,也能夠採用以下形式:

 

[Shell] 純文本查看 複製代碼

1

$ git checkout HEAD^^ -- readme.txt

咱們也能夠將其餘分支的指定提交內容還原到當前分支工做區,首先作一下說明:

 

[Shell] 純文本查看 複製代碼

1

$ git checkout master

checkout後面僅僅跟着分支名稱,那麼它的功能是切換分支。

 

[Shell] 純文本查看 複製代碼

1

$ git checkout Develop -- readme.txt

若是分支後面跟着文件路徑,那麼就是將對應分支中的文件還原到當前分支的工做區。

下面舉個例子,當前咱們在master分支,readme.txt文檔內容爲:

 

[HTML] 純文本查看 複製代碼

1

2

3

螞蟻部落一

螞蟻部落二

螞蟻部落三

如今咱們用Develop分支的指定commit提交的文件來覆蓋master分支工做區:

 

[Shell] 純文本查看 複製代碼

1

$ git checkout Develop -- readme.txt

雙橫槓(--)後面加不加空格的區別能夠參閱git雙橫槓和單橫槓區別一章節。

相關文章
相關標籤/搜索