Git 版本控制及基本常用命令使用詳細大全

  在進行項目開發時,都會用到版本控制工具,如svn、Git等,隨着Git的發展,漸漸的被越來越多的人使用,甚至慢慢在取代svn的地位。下面將從Git倉庫的創建Git常用的基本命令Git的分支管理Git查看提交歷史Git 標籤Git 遠程倉庫來介紹Git的使用。當然下面所涉及的命令都是在Git bash中操作的,所有必須先安裝Git,至於怎樣安裝Git,這裏就不介紹了,網上有一大把安裝教程。

Git 創建倉庫

創建一個git倉庫有如下幾種方式:

  • git init:初始化一個git倉庫
  • git clone:clone一個git倉庫

下面對這幾種方式進行詳細介紹:

  1. git init
      Git使用git init命令來初始化一個Git倉庫,執行完git init命令後,會生成一個.git目錄,該目錄包含了資源數據,且只會在倉庫的根目錄生成。

如果用當前目錄作爲Git倉庫,則只需要執行如下命令:

git init

執行結果如下:
在這裏插入圖片描述
執行該命令之後,就可以在當前目錄下生成.init文件夾,並且會默認生成一個master分支。

如果要在指定的目錄下生成倉庫,則指令如下:

git init newDir

newDir爲倉庫的路徑,執行完成之後,會在newDir目錄下生成一個.git目錄。具體的執行結果如下:
在這裏插入圖片描述
執行該命令之後,就可以在當前目錄下生成newtest文件夾,並在改文件夾下生成.init文件夾。

  1. git clone
    使用git clone命令可以從Git倉庫拷貝項目,類似於SVN中的 svn checkout,命令格式爲:
git clone <url> [directory]

url爲git倉庫地址,directory爲本地目錄,比如,要克隆某個Git 代碼倉庫,可以用下面的命令:

git clone git://github.com/schacon/grit.git

執行完成之後會在當前目錄下生成倉庫,如果要指定目錄下生成,則可以在後面加一個具體的位置路徑,如:

git clone git://github.com/schacon/grit.git newgit

如下爲clone一個倉庫的執行結果:
在這裏插入圖片描述
  git clone 時,可以用不同的協議,包括 ssh, git, https 等,其中最常用的是 ssh,因爲速度較快,還可以配置公鑰免輸入密碼,各種寫法格式如下:

git clone [email protected]/schacon/grit.git         --SSH協議
git clone git://github.com/schacon/grit.git          --GIT協議
git clone https://github.com/schacon/grit.git      --HTTPS協議

Git 基本指令的使用

下面介紹一下git中常用的幾種命令:

  • git config:配置信息
  • git add:添加文件到緩存命令
  • git status:查看文件的狀態命令
  • git diff:查看更新的詳細信息命令
  • git commit:提交命令
  • git reset HEAD:取消緩存命令
  • git rm:刪除命令
  • git mv:移動或重命名命令

下面對這幾個命令進行詳細介紹:

  1. git config
    我們可以通過git config來配置用戶名和郵箱地址,便於我們將代碼提交到遠程倉庫,具體格式如下:
git config --global user.name '你的用戶名'
git config --global user.email '你的郵箱'
  1. git add
    git add 命令可將文件添加到緩存,如新項目中,添加所有文件很普遍,可以使用如下命令:
git add .

當然我們也可以指定某一類文件,如將java文件添加到緩存中,可以使用如下命令:

it add *.java

如:我們可以創建兩個文件,將它添加的緩存中,具體操作如下:
在這裏插入圖片描述
3. git status
我們可以使用 git status 命令來查看相關文件的狀態,直接執行如下命令:

git status

如果有修改的文件,則執行結果如下:
在這裏插入圖片描述
根據上面git status命令的提示內容,我們可以得到三種處理情況:

  • 暫存文件的命令:git add <文件名>
  • 放棄未暫存文件的修改命令:git checkout – <文件名>
  • 將被修改的文件暫存並提交的命令:git commit -a

  如果你對Git的各種狀態比較熟悉了,也可以使用 git status -s 來查看簡寫的狀態,這種簡寫的狀態和SVN上的差不多 M - 被修改,A - 被添加,D - 被刪除,R - 重命名,?? - 未被跟蹤 等等。如果有修改的文件,則執行結果如下:
在這裏插入圖片描述
4. git diff
  執行 git diff 來查看更新的詳細信息,與git status不同的是,git status只顯示更新的狀態,而 git diff 可以顯示已寫入緩存與已修改但尚未寫入緩存的改動的區別具體的詳細信息。

  • 尚未緩存的改動:git diff
  • 查看已緩存的改動: git diff --cached
  • 查看已緩存的與未緩存的所有改動:git diff HEAD
  • 顯示摘要而非整個 diff:git diff --stat

如:我們在修改一下test.txt文件內容,使用git diff查看修改詳細信息:
在這裏插入圖片描述
之後我們將修改的內容add到緩存中,再使用git diff查看修改詳細信息:
在這裏插入圖片描述

  1. git commit
    git commit 將緩存區內容添加到倉庫中,可以在後面加-m選項,以在命令行中提供提交註釋,格式如下:
git commit -m "第一次版本提交"

如果你覺得 每次 commit之前要add一下,想跳過add這一步,可以直接使用 -a選項,如:

git commit -am "第一次版本提交"

如:我們可以創建一個文件,並將它添加打緩存,之後在提交,具體操作如下:
在這裏插入圖片描述
6. git reset HEAD
git reset HEAD 命令用於取消已緩存的內容,如我們要取消已提交的test.txt文件,可以如下使用:

git reset HEAD test.txt

執行完之後,再使用commit提交時,test.txt文件不會被提交。
如:我們先修改test1.txt,test2.txt文件,之後再都添加到緩存,然後再使用git reset HEAD命令恢復test1.txt,最後再使用提交,具體操作如下:
在這裏插入圖片描述
可以看出,修改的test1文件經過git reset HEAD後,沒有被提交上去。簡而言之,執行 git reset HEAD 以取消之前 git add 添加。
7. git rm
如果只是簡單地從工作目錄中手工刪除文件,運行 git status 時就會在 Changes not staged for commit 的提示。要從 Git 中移除某個文件,就必須要從已跟蹤文件清單中移除,然後提交。可以如下使用:

git rm <file>

如果刪除之前修改過並且已經放到暫存區域的話,則必須要用強制刪除選項 -f

git rm -f <file>

  如果把文件從暫存區域移除,但仍然希望保留在當前工作目錄中,換句話說,僅是從跟蹤清單中刪除,使用 --cached 選項即可

git rm --cached <file>

可以遞歸刪除,即如果後面跟的是一個目錄做爲參數,則會遞歸刪除整個目錄中的所有子目錄和文件:

git rm –r *

如:我們移除上面所創建的hello.java文件:
在這裏插入圖片描述

  1. git mv
    git mv 命令用於移動或重命名一個文件、目錄、軟連接,如要將一個test.txt文件重命名爲newtest.txt,則可以使用如下命令:
git mv test.txt newtest.txt

如:我們將上面的test1.txt文件重命名爲test.txt:
在這裏插入圖片描述

Git的分支管理

  幾乎每種版本控制系統都支持分支管理,使用分支我們可以從主幹中分離出來,然後繼續開發,不影響主幹。下面介紹一下Git中分支常用的命令:

  • git branch:查看分支命令
  • git branch (branchname):創建分支命令
  • git checkout (branchname):切換分支命令
  • git merge:合併分支命令
  • git branch -d (branchname):刪除分支命令

下面分別對這些命令進行詳細介紹:

  1. git branch
    git branch可以查看分支,也可以創建分支,如果沒有參數時,git branch會列出你在本地的分支;如果有參數時,git branch就會創建改參數的分支。

如果要查看分支,命令格式如下:

git branch

在bash執行的效果如下圖所示:
在這裏插入圖片描述
當我們想創建分支時,可以在後面加參數,命令格式如下:

git branch  branchname

如我們想創建一個test的分支,可以如下操作:
在這裏插入圖片描述
  現在我們可以看到,多了一個新的分支test。而master分支在我們執行git init的時候,缺省情況下 Git 就會爲你創建 master 分支。

  1. git checkout (branchname)
    git checkout可以切換分支,命令格式如下:
git checkout branchname

如果我們想切換到上面剛剛創建的test分支中,可以如下操作:
在這裏插入圖片描述
  可以看到,沒有執行之前,當前的分支是master,當執行之後,當前的分支是test,這個時候可以可以在切換後的分支中繼續操作,而不會影響到其他分支。
  我們也可以使用 git checkout -b (branchname) 命令來創建新分支並立即切換到該分支下,從而在該分支中操作。如,我們想創建一個newtest分支,並創建後就切換到該分支下,可以如下操作:
在這裏插入圖片描述
可以看出,執行之前還在master分支中,執行之後,直接進入newtest分支了。

  1. git merge
    git merge命令可以將任意分支合併到到當前分支中去,命令格式如下:
git merge branchname

如:我們新建一個newtest分支,並在其中增加test3.txt文件,之後在master中將newtest分支的修改合併到master,結果如下:
在這裏插入圖片描述
可見master中也存在test3.txt文件了。
合併衝突
  合併的時候,最大的難點就是衝突了,合併並不僅僅是簡單的文件添加、移除的操作,Git 也會合並修改,如果我們在兩個分支中同時修改了同一個文件,這時再合併,就可能會產生衝突,衝突並不可怕,可怕的是要怎樣去解決,下面以一個小的例子來展示一下合併是衝突的解決。
  還是用上面的那個倉庫,現在有兩個分支:master、newtest,兩個分支中都要test.txt文件,這個時候我們都這個兩個倉庫的文件都進行修改,之後再提交,最後將newtest合併到master中,具體的操作如下:
1、先修改分支:master、newtest中的test.txt文件,並提交:
在這裏插入圖片描述
2、之後再將newtest分支修改的內容合併到master分支中:
在這裏插入圖片描述
 可以看到newtest分支修改的內容和master分支修改的內容發生了衝突,這是根據具體的情況去解決,如下,我們保留兩個分支都有的,之後再add,在commit就可以了:
在這裏插入圖片描述
 到此一個簡單的合併就完成了。實際項目開發中,合併比這要複雜的多,要結合具體的情況去操作。

  • git branch -d (branchname)
    git branch -d可以刪除分支,刪除分支命令格式如下:
git branch -d (branchname)

如:我們要刪除test分支:
在這裏插入圖片描述

Git查看提交歷史

 在使用 Git 提交了若干更新之後,又或者克隆了某個項目,想回顧下提交歷史,我們可以使用 git log 命令查看,如,我們想列出歷史提交記錄如下:
在這裏插入圖片描述
下面介紹查看歷史記錄的幾種選項:

  • –oneline :查看歷史記錄的簡潔版本
  • –graph :查看歷史中什麼時候出現了分支、合併
  • –reverse :逆向顯示所有日誌
  • –author :查找指定用戶的提交日誌
  • –since、–before、 --until、–after: 指定帥選日期
  • –no-merges :選項以隱藏合併提交

我們可以用 –oneline 選項來查看歷史記錄的簡潔版本:
在這裏插入圖片描述
我們還可以用 –graph 選項,查看歷史中什麼時候出現了分支、合併:
在這裏插入圖片描述
 這樣我們可以更清楚明瞭地看到何時工作分叉、又何時歸併,也可以用 –reverse 參數來逆向顯示所有日誌:
在這裏插入圖片描述
 如果只想查找指定用戶的提交日誌可以使用命令:git log --author , 例如,比方說我們要找 Git 源碼中qtqt提交的部分:
在這裏插入圖片描述
 如果你要指定日期,可以執行幾個選項:–since 和 --before,但是你也可以用 --until 和 --after,–no-merges 選項以隱藏合併提交。

例如,如果我要看 Git 項目中八月一日前且在七月二十九日之後的所有提交,我可以執行這個:
在這裏插入圖片描述
 多數情況下,瞭解每條提交與那個分支/標籤關聯是很有用的。–decorate 標記讓git log展示所有指向每個提交引用(如分支,標籤等),如:
在這裏插入圖片描述

Git 標籤

使用標籤可以很方便的永遠的記住那個特別的提交快照,比如:我們發一個新的版本時,可以給它加一個“vx.x”版本,這樣你可以使用git tag給它打上標籤。
創建新標籤
 可以使用 git tag -a vx.x來創建一個標籤。a 選項意爲"創建一個帶註解的標籤"。 不用 -a 選項也可以執行的,但它不會記錄這標籤是啥時候打的,誰打的,也不會讓你添加個標籤的註解。
如:我們爲我們上的例子創建一個標籤:
在這裏插入圖片描述
追加標籤
如果我們忘了給某個提交打標籤,又將它發佈了,我們可以給它追加標籤。如,假設我們發佈了提交 d6f7147,但是那時候忘了給它打標籤。 我們現在也可以:
在這裏插入圖片描述
查看標籤
如果我們要查看所有標籤可以使用以下命令:

git tag

執行結果如下:
在這裏插入圖片描述
指定標籤信息命令:

git tag -a <tagname> -m "某某標籤"

PGP簽名標籤命令:

git tag -s <tagname> -m "某某標籤"

Git 遠程倉庫

 前面我們使用到的 Git 命令都是在本地執行,如果你想通過 Git 分享你的代碼或者與其他開發人員合作。 你就需要將數據放到一臺其他開發人員能夠連接的服務器上。本本將使用 Github 作爲遠程倉庫,來介紹Git 遠程倉庫的使用。
下面介紹遠程倉庫常用的幾種指令:

  • git remote add:添加遠程倉庫
  • git remote:查看當前的遠程倉庫
  • git fetchgit pull:提取遠程倉倉庫
  • git push:推送到遠程倉庫
  • git remote rm:刪除遠程倉庫

1.git remote add
git remote add可以添加一個遠程倉庫,其命令格式如下:

git remote add [alias] [url]

參數[alias]爲別名, [url]爲遠程倉庫的地址,如:我們可以將https://github.com/qtqt/test.git

倉庫添加到本地,並命名爲test,操作如下:
在這裏插入圖片描述
2. git remote
git remote可以查看當前有哪些遠程倉庫,執行結果如下:
在這裏插入圖片描述
可以看出,有上面添加的別名爲test倉庫。

  1. git fetchgit pull
    git fetch可以提取遠程倉庫的數據,如果有多個遠程倉庫,我們可以在後面加倉庫的別名,操作如下:
    在這裏插入圖片描述
     該命令執行完後需要執行git merge 遠程分支到你所在的分支。假設你配置好了一個遠程倉庫,並且你想要提取更新的數據,你可以首先執行 git fetch [alias] 告訴 Git 去獲取它有你沒有的數據,然後你可以執行 git merge [alias]/[branch] 以將服務器上的任何更新(假設有人這時候推送到服務器了)合併到你的當前分支。操作如下:
    在這裏插入圖片描述
     執行完成之後可以在本地倉庫找到遠程倉庫的文件。使用這種方式只能保證本地是一個空的倉庫,如果非空,則會報:fatal: refusing to merge unrelated histories錯誤。

git pull命令用於從另一個存儲庫或本地分支獲取並集成(整合),在默認模式下,git pull是git fetch後跟git merge FETCH_HEAD的縮寫,使用格式:

git pull [options] [<repository> [<refspec>…]]

如:我們可以將遠程倉庫pull到本地,如果本地倉庫和遠程倉庫實際上是獨立的兩個倉庫,–allow-unrelated-history選項來解決。
在這裏插入圖片描述
git fetchgit pull的區別:

  1. git fetch:相當於是從遠程獲取最新版本到本地,不會自動合併。

  2. git pull:相當於是從遠程獲取最新版本並merge到本地。

  3. git push
    git push 推送你的新分支與數據到某個遠端倉庫命令,格式如下:

git push [alias] [branch]

如:我們可以將前面提交的文件push到遠程倉庫中:
在這裏插入圖片描述
5. git remote rm
git remote rm刪除遠程倉庫,格式如下:

git remote rm [別名]

如:我們可以先添加一個test2倉庫,之後再刪除它,操作如下:
在這裏插入圖片描述

好了,到此基本上將Git常用的操作介紹完了。

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