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)都用這樣的檔名儲存副本。此外,你可能還需要忽略 log
,tmp
或者 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》