簡介
Git是一款免費、開源的分布式版本控制系統(tǒng),可以有效、高速的處理從很小到非常大的項目版本管理。目前開發(fā)中大部分開發(fā)者都是使用的Git。
如果是初學(xué)者要由淺入深的完成學(xué)習(xí)Git的話,首推就是廖雪峰的Git教程。
如果說書籍的話,看書比較少,不過覺得《Android群英傳:神兵利器》的第二章講的還不錯。書的PDF版 (侵刪)。
書中的這張圖覺得不錯,有助于對Git的理解:
iamge
本文并不是一個對git講解,而只是對常用的一些Git命令的整理。
盜一張圖:該圖將Git的常用操作已經(jīng)做了很詳盡的整理,使用的時候完全可以做在這張圖中找。下面我也只是對該圖做了一些整理,揀選了些更常用的。圖片在這里保存好使不是很清晰,網(wǎng)盤分享了下 。

Git命令.png
基本流程
-
全局配置
git config --global user.name "wooden" git config --global user.email "wooden.163.com" -
創(chuàng)建新庫,創(chuàng)建README.md并提交
git clone https://github.com/GwindIT/Test.git cd Test touch README.md git add README.md git commit -m "add README" git push -u origin master -
已存在項目關(guān)聯(lián)遠(yuǎn)程Git庫
cd existing_folder git init git remote add origin https://github.com/GwindIT/Test.git git add . git commit git push -u origin master
常用操作
該部分的命令是摘取的更為常用的命令。
git clone <url> (創(chuàng)建新庫)
git add . (添加所有文件到版本庫)
git commit -m "msg" (提交所有修改)
git merge <branchname> (合并分支)
git checkout -b <branchname> ( 基于當(dāng)前分支的末梢創(chuàng)建新分支并且檢出分支)
git checkout <branchname> (檢出分支)
git push (推入遠(yuǎn)程庫)
git pull (獲取并且合并到當(dāng)前本地分支)
git diff (比較的是工作目錄(Working tree)和暫存區(qū)域快照(index)之間的差異)
git status (列出當(dāng)前目錄所有還沒有被git管理的文件和被git管理且被修改但還未提交(git commit)的文件)
本地操作
初始化
-
Git用戶名郵箱的全局配置
git config --global user.name "wooden" git config --global user.email "wooden.163.com" git config --global color.ui "always" -
初始化新版本庫
git init- 根目錄下創(chuàng)建一個名為.git的文件夾。如果你沒有看到.git目錄,那是因為這個目錄默認(rèn)是隱藏的,用ls -ah命令就可以看見。
-
設(shè)置忽略文件
- 在Git工作區(qū)的根目錄下創(chuàng)建一個特殊的.gitignore文件,然后把要忽略的文件名填進去,Git就會自動忽略這些文件。
-
添加文件到新版本庫
- 添加單個文件:
git add somefile.txt- 添加所有txt文件:
git add *.txt- 添加所有文件,包括子目錄,但不包括空目錄:
git add .- 僅監(jiān)控已經(jīng)被add的文件(即tracked file),會將被修改的文件提交到暫存區(qū)。add -u 不會提交新文件(git add -update)
git add -u -
提交
- 提交
git commit -m "Message"- add與commit的合并操作
git commit -am "Message"但需要注意改命令只是提交修改的文件,當(dāng)有新建的文件的時候是無法提交的。
日常操作
-
提交
- 提交所有修改文件
git commit -m "msg" -a- 提交單個文件
git commit -m "add readme msg" readme.txt -
撤銷修改
-
撤銷尚未提交的修改
- 撤銷某個文件
git checkout head readme.txt- 撤銷所有txt文件
git checkout head *.txt- 撤銷所有文件
git checkout head . -
撤銷提交的修改
- 反轉(zhuǎn)提交
git revert --no-commit head生成一個新的提交來撤銷某次提交,此次提交之前的commit都會被保留
- 復(fù)位
取消暫存:git reset head 或 git reset head <filename> 復(fù)位到head之前的版本:git reset --hard head不會在版本中留下痕跡
-
-
分支
- 列出本地分支
git branch- 列出所有分支
git branch -a- 基于當(dāng)前分支末梢創(chuàng)建新分支
git branch <branchname>- 檢出分支
git checkout <branchname>- 基于當(dāng)前分支的末梢創(chuàng)建新分支并且檢出分支
git checkout -b <branchname>-
合并分支
- 普通合并
git merge <branchname>發(fā)生沖突不會自動提交,需要解決沖突。
- 壓合合并
git merge -squash <brachename>- 揀選合并
git cherry-pick --no-commit <branchname> 重命名分支
git branch -m <branchname> <newname> (不會覆蓋已存在的同名分支) git branch -M <branchname> <newname> (覆蓋已存在的同名分支)- 刪除分支
git branch -d new2 (如果分支沒有被合并會刪除失敗) git branch -D new2 (即使分支沒有被合并也照刪不誤) -
解決沖突
- 沖突很少時,直接編輯沖突文件然后提交即可。
-
標(biāo)簽
- 創(chuàng)建標(biāo)簽
git tag 1.0 git tag -a v1.4 -m 'my version 1.4'- 將標(biāo)簽推送到遠(yuǎn)程倉庫
git push origin [tagname](單個標(biāo)簽) git push [origin] --tags(所有標(biāo)簽)- 顯示標(biāo)簽列表
git tag- 檢出標(biāo)簽
git checkout 1.0- 由標(biāo)簽創(chuàng)建分支
git checkout -b b1.0 1.0 git branch b1.0 1.0- 通常的git push不會將標(biāo)簽對象提交到git服務(wù)器,我們需要進行顯式的操作:
git push origin v0.1.2 # 將v0.1.2標(biāo)簽提交到git服務(wù)器 git push origin –tags # 將本地所有標(biāo)簽一次性提交到git服務(wù)器-
刪除本地標(biāo)簽
git tag -d 1.0
-
刪除遠(yuǎn)程標(biāo)簽
git push origin :refs/tags/標(biāo)簽名 git push origin :refs/tags/protobuf-2.5.0rc1 -
查看狀態(tài)
- 當(dāng)前狀態(tài)
git status- 歷史記錄
git log gitk (查看當(dāng)前分支記錄) gitk <branchname> (查看某分支歷史記錄) gitk -all (查看所有分支)- 每個分支最后的提交
git branch -v
遠(yuǎn)程操作
初始化
-
克隆版本庫
git clone <url> -
別名
- 添加別名
git remote add <別名> <遠(yuǎn)程庫URL>- 刪除別名
git remote rm <別名> -
創(chuàng)建一個無本地分支的庫
git branch -bare
日常操作
-
分支
- 列出遠(yuǎn)程分支
git branch -r- 刪除遠(yuǎn)程分支
git push origin --delete <BranchName>- 刪除遠(yuǎn)程已經(jīng)不存在的分支
git remote prune origin -
從遠(yuǎn)程獲取
- 獲取但不合并
git fetch <遠(yuǎn)程版本庫>- 獲取并且合并到當(dāng)前本地分支
git pull -
推入遠(yuǎn)程庫
git push origin master -
本地分支與關(guān)聯(lián)遠(yuǎn)程分支
git branch --set-upstream-to=origin/<branchename>