通常在新的系統上,咱們都須要先配置下本身的 Git 工做環境。配置工做只需一次,之後升級時還會沿用如今的配置。固然,若是須要,你隨時能夠用相同的命令修改已有的配置。
Git 提供了一個叫作 git config 的工具,專門用來配置或讀取相應的工做環境變量。git
$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com
文本編輯器通常默認是vi或vim,能夠經過如下命令配置成其餘編輯器github
$ git config --global core.editor emacs
$ git config --global merge.tool vimdiff
git config --list
三種方法:vim
$ git help <verb> $ git <verb> --help $ man git-<verb>
要對現有的某個項目開始用 Git 管理,只需到此項目所在的目錄,執行:服務器
$ git init
初始化後,在當前目錄下會出現一個名爲 .git 的目錄,全部 Git 須要的數據和資源都存放在這個目錄中。編輯器
克隆倉庫的命令格式爲 git clone [url]。好比,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,能夠用下面的命令:工具
$ git clone git://github.com/schacon/grit.git //項目目錄名稱:grit 或 $ git clone git://github.com/schacon/grit.git mygrit //項目目錄名稱:mygrit
$ git status
$ git add README
如今咱們修改下以前已跟蹤過的文件 benchmarks.rb,而後再次運行 status 命令,會看到這樣的狀態報告:fetch
$ git status # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # new file: README # # Changed but not updated: # (use "git add <file>..." to update what will be committed) # # modified: benchmarks.rb #
文件 benchmarks.rb 出如今 「Changed but not updated」 這行下面,說明已跟蹤文件的內容發生了變化,但尚未放到暫存區。要暫存此次更新,須要運行 git add 命令(這是個多功能命令,根據目標文件的狀態不一樣,此命令的效果也不一樣:能夠用它開始跟蹤新文件,或者把已跟蹤的文件放到暫存區,還能用於合併時把有衝突的文件標記爲已解決狀態等)。ui
運行 git add 將 benchmarks.rb 放到暫存區,下次提交時就會一併記錄到倉庫。url
建立一個名爲 .gitignore 的文件,列出要忽略的文件模式spa
文件 .gitignore 的格式規範以下:
星號( *)匹配零個或多個任意字符; [abc] 匹配任何一個列在方括號中的字符(這個例子要麼匹配一個 a,要麼匹配一個 b,要麼匹配一個 c);問號( ?)只匹配一個任意字符;若是在方括號中使用短劃線分隔兩個字符,表示全部在這兩個字符範圍內的均可以匹配(好比 [0-9] 表示匹配全部 0 到 9 的數字)。
一個 .gitignore 文件的例子:
# 此爲註釋 – 將被 Git 忽略 *.a # 忽略全部 .a 結尾的文件 !lib.a # 但 lib.a 除外 /TODO # 僅僅忽略項目根目錄下的 TODO 文件,不包括 subdir/TODO build/ # 忽略 build/ 目錄下的全部文件 doc/*.txt # 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
要查看還沒有暫存的文件更新了哪些部分,不加參數直接使用:
$ git diff
查看已經暫存起來的文件和上次提交時的快照之間的差別,能夠用:
$ git diff --cached 或 $ git diff --staged
每次準備提交前,先用 git status 看下,是否是都已暫存起來了,而後再運行提交命令 git commit:
$ git commit
這種方式會啓動文本編輯器以便輸入本次提交的說明。退出編輯器時,Git 會丟掉註釋行,將說明內容和本次更新提交到倉庫。
也可使用 -m 參數後跟提交說明的方式,在一行命令中提交更新:
$ git commit -m "Story 182: Fix benchmarks for speed"
跳過使用暫存區域
儘管使用暫存區域的方式能夠精心準備要提交的細節,但有時候這麼作略顯繁瑣。Git 提供了一個跳過使用暫存區域的方式,只要在提交的時候,給 git commit 加上 -a 選項,Git 就會自動把全部已經跟蹤過的文件暫存起來一併提交,從而跳過 git add 步驟:
$ git commit -a -m 'added new benchmarks'
要從 Git 中移除某個文件,就必需要從已跟蹤文件清單中移除(確切地說,是從暫存區域移除),而後提交。能夠用 git rm 命令完成此項工做,並連帶從工做目錄中刪除指定的文件,這樣之後就不會出如今未跟蹤文件清單中了。
$ git rm grit.gemspec
若是刪除以前修改過而且已經放到暫存區域的話,則必需要用強制刪除選項 -f(譯註:即 force 的首字母),以防誤刪除文件後丟失修改的內容。
另一種狀況是,咱們想把文件從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然但願保留在當前工做目錄中。換句話說,僅是從跟蹤清單中刪除。好比一些大型日誌文件或者一堆 .a 編譯文件,不當心歸入倉庫後,要移除跟蹤但不刪除文件,以便稍後在 .gitignore 文件中補上,用 --cached 選項便可:
$ git rm --cached readme.txt
$ git mv file_from file_to
例如:
$ git mv README.txt README $ git status # On branch master # Your branch is ahead of 'origin/master' by 1 commit. # # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # renamed: README.txt -> README #
其實,運行 git mv 就至關於運行了下面三條命令:
$ mv README.txt README $ git rm README.txt $ git add README
$ git log
默認不用任何參數的話, git log 會按提交時間列出全部的更新,最近的更新排在最上面。
有時候咱們提交完了才發現漏掉了幾個文件沒有加,或者提交信息寫錯了。想要撤消剛纔的提交操做,可使用 --amend 選項從新提交:
$ git commit --amend
啓動文本編輯器後,會看到上次提交時的說明,編輯它確認沒問題後保存退出,就會使用新的提交說明覆蓋剛纔失誤的提交。
例:取消暫存 的benchmarks.rb 文件:
$ git reset HEAD benchmarks.rb
若是以爲剛纔對 benchmarks.rb 的修改徹底沒有必要,能夠取消修改,回到以前的狀態(也就是修改以前的版本):
$ git checkout -- benchmarks.rb
$ git remote //顯示遠程倉庫的名字 $ git remote -v //顯示遠程倉庫的名字和對應的克隆地址
要添加一個新的遠程倉庫,能夠指定一個簡單的名字,以便未來引用,運行 git remote add [shortname] [url]:
$ git remote add pb git://github.com/paulboone/ticgit.git
能夠用下面的命令從遠程倉庫抓取數據到本地:
$ git fetch [remote-name]
將本地倉庫中的數據推送到遠程倉庫。實現這個任務的命令很簡單: git push [remote-name] [branch-name]。若是要把本地的 master 分支推送到 origin 服務器上(再次說明下,克隆操做會自動使用默認的 master 和 origin 名字),能夠運行下面的命令:
$ git push origin master
能夠經過命令 git remote show [remote-name] 查看某個遠程倉庫的詳細信息:
$ git remote show origin
能夠用 git remote rename 命令修改某個遠程倉庫的簡短名稱,好比想把 pb 改爲 paul,能夠這麼運行:
$ git remote rename pb paul
注意,對遠程倉庫的重命名,也會使對應的分支名稱發生變化,原來的 pb/master 分支如今成了 paul/master。
碰到遠端倉庫服務器遷移,或者原來的克隆鏡像再也不使用,又或者某個參與者再也不貢獻代碼,那麼須要移除對應的遠端倉庫,能夠運行 git remote rm 命令:
$ git remote rm paul
$ git tag
咱們能夠用特定的搜索模式列出符合條件的標籤。只對 1.4.2 系列的版本感興趣,能夠運行下面的命令:
$ git tag -l 'v1.4.2.*'
建立一個含附註類型的標籤很是簡單,用 -a (譯註:取 annotated 的首字母)指定標籤名字便可:
$ git tag -a v1.4 -m 'my version 1.4'
而 -m 選項則指定了對應的標籤說明,Git 會將此說明一同保存在標籤對象中。若是在此選項後沒有給出具體的說明內容,Git 會啓動文本編輯軟件供你輸入。
可使用 git show 命令查看相應標籤的版本信息,並連同顯示打標籤時的提交對象:
$ git show v1.4
輕量級標籤實際上就是一個保存着對應提交對象的校驗和信息的文件。要建立這樣的標籤,一個 -a, -s 或-m 選項都不用,直接給出標籤名字便可:
$ git tag v1.4-lw
你甚至能夠在後期對早先的某次提交加註標籤,只要在打標籤的時候跟上對應提交對象的校驗和(或前幾位字符)便可:
$ git tag -a v1.2 9fceb02
默認狀況下, git push 並不會把標籤傳送到遠端服務器上,只有經過顯式命令才能分享標籤到遠端倉庫。其命令格式如同推送分支,運行 git push origin [tagname] 便可:
$ git push origin v1.5
若是要一次推送全部(本地新增的)標籤上去,可使用 --tags 選項:
$ git push origin --tags