Git 的使用及常用命令的使用
Git是什麼?
Git是目前世界上最先進的分散式版本控制系統 (沒有之一);相比於CVS及SVN都是集中式的版本控制系統,Git是分散式版本控制系統;
建立版本庫
1、在指定目錄下建立一個新的原生代碼倉庫
git init
git clone https://github.com/henryneu/SwipeRefreshDemo.git
本地修改
1、檢視當前工作目錄下檔案的狀態
git status
2、檢視當前工作目錄下修改了哪些內容
// 此命令比較的是當前工作目錄中當前檔案和暫存區域快照之間的差異,也就是修改之後還沒有暫存起來的變化內容
git diff
// 若要看已經暫存起來的檔案和上次提交時的快照之間的差異(Git 1.6.1 及更高版本還允許使用 git diff --staged,
// 效果是相同的,但更好記些)
git diff --cached
// 檢視某一目錄下具體檔案的變化
git diff /f/MyRecyclerViewDemo/README.md
3、把當前工作目錄下所有檔案的更改提交到暫存區
// 開始跟蹤當前工作目錄下的所有檔案
git add .
4、新增指定檔案中的一些修改到暫存區
git add -p <file>
5、強制新增指定檔案到暫存區
git add -f <file>
6、提交更改
// 提交之前,須確認還有什麼修改過的或新建的檔案還沒有 git add 過,否者提交的時候不會記錄這些還沒暫存起來的變化
// 所以每次提交前,先 git status 看一下
git commit
// 使用 -m 引數後跟提交說明的方式,在一行命令中提交更新
git commit -m "提交說明"
7、把所有已經跟蹤過的當前工作目錄下的檔案暫存起來一併提交,跳過 git add 步驟
git commit -a -m "提交說明"
8、提交時漏掉幾個檔案,或者提交資訊寫錯,想撤銷剛才的提交操作,使用 –amend 命令重新提交
// --amend 命令使用當前的暫存區域快照提交,如果剛才提交完沒有作任何改動,此命令相當於重新編輯提交說明
git commit --amend
// 如果剛才提交時忘了暫存某些修改,可以先補上暫存操作,在執行 --amend 命令
git add forgetten_file
git commit --amend
9、取消已經暫存的檔案 test.txt
// test.txt檔案回到之前已修改為暫存的狀態
git reset HEAD test.txt
10、撤消對檔案 test.txt 的修改
// test.txt檔案恢復到修改前的版本
git checkout -- test.txt
11、重新命名當前工作目錄及版本庫中指定檔案的名字
// 更改指定檔案的名字
git mv text.txt test.txt
忽略某些檔案
我們總會有些檔案無需納入 Git 的管理,也不希望它們總出現在未跟蹤檔案列表。通常都是些自動生成的檔案,比如日誌檔案,或者編譯過程中建立的臨時檔案等。此時可以建立一個名為 .gitignore 的檔案,列出要忽略的檔案模式,自動過濾設定的檔案。在提交的時候,會過濾掉.gitignore檔案中所設定的過濾條件。
檔案 .gitignore 的格式規範如下:
1、所有空行或者以註釋符號 # 開頭的行都會被 Git 忽略。
2、可以使用標準的 glob 模式匹配。
3、匹配模式最後跟反斜槓(/)說明要忽略的是目錄。
4、要忽略指定模式以外的檔案或目錄,可以在模式前加上驚歎號(!)取反。
建立.gitignore檔案:
1、在已建立好的程式碼倉庫中,建立.gitignore檔案
touch .gitignore
2、編輯.gitignore檔案
# 此為註釋 – 將被 Git 忽略
# 忽略所有 .a 結尾的檔案
*.a
# 但 lib.a 除外
!lib.a
# 僅僅忽略專案根目錄下的 TODO 檔案,不包括 subdir/TODO
/TODO
# 忽略 build/ 目錄下的所有檔案
build/
# 會忽略 doc/notes.txt 但不包括 doc/server/arch.txt
doc/*.txt
刪除檔案
1、先新增一個新檔案test.txt到Git並且提交
git add test.txt
git commit -m "add test"
2、刪除檔案test.txt
// 移除test.txt檔案
rm test.txt
// 從版本庫中移除並提交
git rm test.txt
git commit -m "remove test"
// 把檔案從 Git 倉庫中刪除(亦即從暫存區域移除),但仍然希望保留在當前工作目錄中
git rm --cached test.txt
git commit -m "remove test"
檢視提交歷史
檢視提交歷史命令如下:
// 不用任何引數,會按提交時間列出所有的更新,最近的跟新排在最上面
git log
// -p引數展開顯示每次提交的內容差異,-2僅顯示最近的兩次更新
// 程式碼審查或者要快速瀏覽其他協作者提交的更新都作了哪些改動時,使用此命令
git log -p -2
// 僅顯示簡要的增改行數統計
git log --stat
// 指定使用完全不同於預設格式的方式展示提交歷史,如oneline,顯示在一行,還有short、full和fuller
git log --pretty=oneline
// 定製要顯示的記錄格式,讀者可以自查,常用的格式佔位符寫法及其代表的意義
// 命令的格式是:提交物件的簡短雜湊字串 - 作者名字 - 作者修訂日期,按多久以前的方式顯示 - 提交說明
git log --pretty=format:"%h - %an, %ar : %s"
// 再結合 --graph 命令,形象的展示每個提交所在的分支及其分化衍合情況
git log --pretty=format:"%h - %an, %ar : %s" --graph
// --since 和 --until 限制輸出長度,如下命令,列出所有最近兩週內的提交
git log --since=2.week
遠端倉庫的使用
1、檢視當前的遠端倉庫
// 列出每個遠端庫的簡短名字
git remote
// 列出每個遠端庫的簡短名字及對應的地址
git remote -v
2、新增遠端庫
// 新增新的遠端庫,並指定一個簡單的名字
git remote add [shortname][url]
git remote add mrv https://github.com/henryneu/SwipeRefreshDemo.git
3、從遠端倉庫抓取資料
// 從遠端倉庫中抓取資料到本地
git fetch [url 或 remote-name]
4、推送資料到遠端倉庫
// 將本地的 master 分支推送到 origin 伺服器上
git push origin master
5、檢視遠端倉庫資訊
// 檢視 origin 倉庫的資訊
git remote show origin
6、遠端倉庫的刪除和重新命名
// 把我們上面的新遠端庫 mrv 重新命名為 paul
git remote rename mrv paul
// 移除對應的遠端倉庫
git remote rm paul
打標籤
1、列顯已有的標籤
// 列顯標籤,顯示的標籤按字母順序排列
git tag
// 僅顯示1.4.2系列的版本
git tag -l 'v1.4.2.*'
2、新建標籤,兩種型別:輕量級的(lightweight)和含附註的(annotated)
// 新建一個輕量級的標籤
git tag v1.1
// 新建一個含附註型別的標籤 -a 指定標籤名字 -m 指定了對應標籤的說明
git tag -a v1.0 -m "version 1.0"
// 檢視相應標籤的版本資訊
git show v1.0
3、部署標籤
// 若有私鑰的話,可以用GPG來簽署標籤
git tag -s v1.1 -m "version signed 1.1"
4、驗證已經部署的標籤
// 驗證已部署標籤
git tag -v v1.1
5、後期加註標籤
// 驗證已部署標籤
git tag -a v1.2 [對應提交物件的校驗和(或前幾位字元)]
6、分享標籤
// 分享標籤到遠端倉庫
git push origin v1.2
// 一次推送所有(本地新增的)標籤到遠端倉庫
git push origin --tags
Git 分支
1、建立分支
// 建立一個新的分支指標 testing
git branch testing
2、切換分支
// 切換到分支 testing
git checkout testing
// 相當於先建立分支,然後切換到新建的分支
git checkout -b testing
3、合併分支
// 先切換 master 分支
git checkout master
// 後合併分支 testing 到 master 分支上
git merge testing
// 合併之後可以刪掉 testing 分支,然後可以進行 commit 提交
git branch -d testing
// 未合併的分支,執行刪除會失敗,此時也可以強制執行刪除操作
git branch -D testing
4、分支衍合
// 提取所在分支 testing 每次提交時產生的差異,分別儲存到臨時檔案中
git checkout testing
// 從當前分支轉換到需要衍合入的分支 master
git rebase master
5、分支管理
// 檢視各個分支最後一次 commit 資訊
git branch -v
// 檢視哪些分支已被/未被併入當前分支
git branch --merged / --no-merged
6、遠端分支,是對遠端倉庫狀態的索引,用 (遠端倉庫名) / (分支名) 這樣的形式表示遠端分支,如:origin / master
// 為本地分支設定不同於遠端分支的名字 os
git checkout -b os origin/master
// 推送 master 到遠端分支
git push origin master
// 刪除遠端分支 testing
git push origin : testing