Git是什麼?
Git是目前世界上最先進的分佈式版本控制系統 (沒有之一);相比於CVS及SVN都是集中式的版本控制系統,Git是分佈式版本控制系統;
創建版本庫
1、在指定目錄下創建一個新的本地代碼倉庫
git init
2、克隆一個遠程代碼庫到本地,比如GitHub地址爲:https://github.com/henryneu/SwipeRefreshDemo.git
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