1. 程式人生 > >Git學習03-----最基本的幾個命令

Git學習03-----最基本的幾個命令

一. 取得專案的Git倉庫

有兩個辦法:

1.1 在工作目錄中初始化新倉庫

就是在現有的某個專案中執行git init後,就可以對這個專案進行git專案管理了。

1.2 從現有從庫克隆

git clone [url]

通過執行上面這條命令,就可以對這個URL指定的專案進行git專案管理了。

Note:成功進行Git專案管理後,會有一個隱藏檔案:.git,用於儲存下載下來的所有版本記錄,然後從中取出最新版本的檔案拷貝

二. 跟蹤修改

工作目錄下的所有檔案不外乎兩種狀態:已跟蹤和未跟蹤。

1. 未跟蹤

假設我們建立了一個新的檔案hellworld,這個時候檢視git status命令,就會出現提示“nothing added to commit but untracked files present (use "git add" to track) ,意思是出現了未跟蹤的檔案,我們可以通過執行git add來讓它成為跟蹤檔案。

2. 暫存已修改檔案

假設helloworld已經add了,這個時候我再修改裡面的內容,並git status,就會發現如下提示資訊

$ git status
    # On branch master
    # Changes to be committed:
    # (use "git reset HEAD <file>..." to unstage)
    #
    # new file: README
    #
    # Changes not staged for commit:
    # (use "git add <file>...
" to update what will be committed) # # modified: helloworld #

說明:a.txt出現在“Changes not staged for commit"下面,說明已跟蹤檔案的內容已經發生了變化,但是還沒有放到暫存區中,要暫存這次更新,需要執行git add命令(這是個多功能命令,根據目標檔案的狀態不同,此命令的效果也不同:可以用它開始跟蹤新檔案,或者把已跟蹤的檔案放到暫存區,還能用於合併時把有衝突的檔案標記為已解決狀態等)

3. 同一個檔案多次修改

假設上面的helloword.java檔案已經被修改過了,且執行了git status後,是如下狀態:

這個時候又再次修改,這個時候git status就會出現同一個檔案的兩種狀態:

git add後,才會得到最新的更新,否則,直接commit的是本次更新前的那一次的修改的內容,即綠色修改部分的內容。

三. 忽略某些修改

一般我們總會有些檔案無需納入 Git 的管理,也不希望它們總出現在未跟蹤檔案列表。通常都是些自動生成的檔案,比如日誌檔案,或者編譯過程中建立的臨時檔案等。我們可以建立一個名為 .gitignore 的檔案,列出要忽略的檔案模式。來看一個實際的例子:

 

第一行告訴 Git 忽略所有以 .o 或 .a 結尾的檔案。一般這類物件檔案和存檔檔案都是編譯過程中出現的,我們用不著跟蹤它們的版本。第二行告訴 Git 忽略所有以波浪符(~)結尾的檔案,許多文字編輯軟體(比如 Emacs)都用這樣的檔名儲存副本。此外,你可能還需要忽略 logtmp 或者 pid 目錄,以及自動生成的文件等等。要養成一開始就設定好 .gitignore 檔案的習慣,以免將來誤提交這類無用的檔案。

檔案 .gitignore 的格式規範如下:

  • 所有空行或者以註釋符號  開頭的行都會被 Git 忽略。
  • 可以使用標準的 glob 模式匹配。
  • 匹配模式最後跟反斜槓(/)說明要忽略的是目錄。
  • 要忽略指定模式以外的檔案或目錄,可以在模式前加上驚歎號(!)取反。

所謂的 glob 模式是指 shell 所使用的簡化了的正則表示式。星號(*)匹配零個或多個任意字元;[abc] 匹配任何一個列在方括號中的字元(這個例子要麼匹配一個 a,要麼匹配一個 b,要麼匹配一個 c);問號(?)只匹配一個任意字元;如果在方括號中使用短劃線分隔兩個字元,表示所有在這兩個字元範圍內的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的數字)。

我們再看一個 .gitignore 檔案的例子:

四. 檢視已暫存和未暫存的更新

假設遠端提交的內容是列印Hello World這個字串,但是本地第一次修改後並暫存(git add)起來後,內容是:Hello World2。 這個時候又修改一次,內容是Hello World222。

1. 對比工作區(未暫存的)和已經暫存的內容差異

執行 git diff

2. 對比暫存的和上一次提交的內容的差異

執行 git diff --staged 或者git diff --cached

五. 檔案提交

1. 正規流程git add, git commit提交

2. 快捷流程,可以跳過git add,但是需要新增 -a選項: git commit -a,Git 就會自動把所有已經跟蹤過的檔案暫存起來一併提交,從而跳過 git add 步驟。

六. 移除檔案

git rm 新增引數選項  檔名

七. 檢視提交歷史

1. git log

它有很多的可選引數,比如限制在一個提交一行顯示,顯示的格式,顯示的長度等等。

2. 使用圖形化工具查閱提交歷史

有時候圖形化工具更容易展示歷史提交的變化,隨 Git 一同釋出的 gitk 就是這樣一種工具。它是用 Tcl/Tk 寫成的,基本上相當於 git log 命令的視覺化版本,凡是 git log 可以用的選項也都能用在 gitk 上。在專案工作目錄中輸入 gitk 命令後,就會啟動圖 2-2 所示的介面。


                                    圖 2-2. gitk 的圖形介面

上半個視窗顯示的是歷次提交的分支祖先圖譜,下半個視窗顯示當前點選的提交對應的具體差異。

八. 撤銷操作

有時候我們提交完了才發現漏掉了幾個檔案沒有加,或者提交資訊寫錯了。想要撤消剛才的提交操作,可以使用 --amend 選項重新提交:

$ git commit --amend

此命令將使用當前的暫存區域快照提交。如果剛才提交完沒有作任何改動,直接執行此命令的話,相當於有機會重新編輯提交說明,但將要提交的檔案快照和之前的一樣。

啟動文字編輯器後,會看到上次提交時的說明,編輯它確認沒問題後儲存退出,就會使用新的提交說明覆蓋剛才失誤的提交。

如果剛才提交時忘了暫存某些修改,可以先補上暫存操作,然後再執行 --amend 提交:

九. 遠端倉庫的使用

1. 檢視當前的遠端倉庫

git remote -v命令,就可以看見:

2. 遠端倉庫的刪除和重新命名

碰到遠端倉庫伺服器遷移,或者原來的克隆映象不再使用,又或者某個參與者不再貢獻程式碼,那麼需要移除對應的遠端倉庫,可以執行 git remote rm 命令:

 

 參考文獻

《Pro Git》