簡(jiǎn)介
Git是一款免費(fèi)句喜、開源的分布式版本控制系統(tǒng)涧郊,可以有效贯被、高速的處理從很小到非常大的項(xiàng)目版本管理。目前開發(fā)中大部分開發(fā)者都是使用的Git底燎。
如果是初學(xué)者要由淺入深的完成學(xué)習(xí)Git的話刃榨,首推就是廖雪峰的Git教程。
如果說書籍的話双仍,看書比較少枢希,不過覺得《Android群英傳:神兵利器》的第二章講的還不錯(cuò)。書的PDF版 (侵刪)朱沃。
書中的這張圖覺得不錯(cuò),有助于對(duì)Git的理解:
本文并不是一個(gè)對(duì)git講解苞轿,而只是對(duì)常用的一些Git命令的整理。
盜一張圖:該圖將Git的常用操作已經(jīng)做了很詳盡的整理逗物,使用的時(shí)候完全可以做在這張圖中找搬卒。下面我也只是對(duì)該圖做了一些整理,揀選了些更常用的翎卓。圖片在這里保存好使不是很清晰契邀,網(wǎng)盤分享了下 。
基本流程
-
全局配置
git config --global user.name "wooden" git config --global user.email "wooden.163.com"
-
創(chuàng)建新庫(kù)失暴,創(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
-
已存在項(xiàng)目關(guān)聯(lián)遠(yuǎn)程Git庫(kù)
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)建新庫(kù))
git add . (添加所有文件到版本庫(kù))
git commit -m "msg" (提交所有修改)
git merge <branchname> (合并分支)
git checkout -b <branchname> ( 基于當(dāng)前分支的末梢創(chuàng)建新分支并且檢出分支)
git checkout <branchname> (檢出分支)
git push (推入遠(yuǎn)程庫(kù))
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"
-
初始化新版本庫(kù)
git init
- 根目錄下創(chuàng)建一個(gè)名為.git的文件夾。如果你沒有看到.git目錄逗扒,那是因?yàn)檫@個(gè)目錄默認(rèn)是隱藏的古戴,用ls -ah命令就可以看見。
-
設(shè)置忽略文件
- 在Git工作區(qū)的根目錄下創(chuàng)建一個(gè)特殊的.gitignore文件矩肩,然后把要忽略的文件名填進(jìn)去现恼,Git就會(huì)自動(dòng)忽略這些文件。
-
添加文件到新版本庫(kù)
- 添加單個(gè)文件:
git add somefile.txt
- 添加所有txt文件:
git add *.txt
- 添加所有文件,包括子目錄黍檩,但不包括空目錄:
git add .
- 僅監(jiān)控已經(jīng)被add的文件(即tracked file)叉袍,會(huì)將被修改的文件提交到暫存區(qū)。add -u 不會(huì)提交新文件(git add -update)
git add -u
-
提交
- 提交
git commit -m "Message"
- add與commit的合并操作
git commit -am "Message"
但需要注意改命令只是提交修改的文件刽酱,當(dāng)有新建的文件的時(shí)候是無法提交的颜凯。
日常操作
-
提交
- 提交所有修改文件
git commit -m "msg" -a
- 提交單個(gè)文件
git commit -m "add readme msg" readme.txt
-
撤銷修改
-
撤銷尚未提交的修改
- 撤銷某個(gè)文件
git checkout head readme.txt
- 撤銷所有txt文件
git checkout head *.txt
- 撤銷所有文件
git checkout head .
-
撤銷提交的修改
- 反轉(zhuǎn)提交
git revert --no-commit head
生成一個(gè)新的提交來撤銷某次提交间校,此次提交之前的commit都會(huì)被保留
- 復(fù)位
取消暫存:git reset head 或 git reset head <filename> 復(fù)位到head之前的版本:git reset --hard head
不會(huì)在版本中留下痕跡
-
-
分支
- 列出本地分支
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ā)生沖突不會(huì)自動(dòng)提交戚宦,需要解決沖突。
- 壓合合并
git merge -squash <brachename>
- 揀選合并
git cherry-pick --no-commit <branchname>
重命名分支
git branch -m <branchname> <newname> (不會(huì)覆蓋已存在的同名分支) git branch -M <branchname> <newname> (覆蓋已存在的同名分支)
- 刪除分支
git branch -d new2 (如果分支沒有被合并會(huì)刪除失敗) git branch -D new2 (即使分支沒有被合并也照刪不誤)
-
解決沖突
- 沖突很少時(shí)察郁,直接編輯沖突文件然后提交即可。
-
標(biāo)簽
- 創(chuàng)建標(biāo)簽
git tag 1.0 git tag -a v1.4 -m 'my version 1.4'
- 將標(biāo)簽推送到遠(yuǎn)程倉(cāng)庫(kù)
git push origin [tagname](單個(gè)標(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不會(huì)將標(biāo)簽對(duì)象提交到git服務(wù)器转唉,我們需要進(jìn)行顯式的操作:
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 (查看所有分支)
- 每個(gè)分支最后的提交
git branch -v
遠(yuǎn)程操作
初始化
-
克隆版本庫(kù)
git clone <url>
-
別名
- 添加別名
git remote add <別名> <遠(yuǎn)程庫(kù)URL>
- 刪除別名
git remote rm <別名>
-
創(chuàng)建一個(gè)無本地分支的庫(kù)
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)程版本庫(kù)>
- 獲取并且合并到當(dāng)前本地分支
git pull
-
推入遠(yuǎn)程庫(kù)
git push origin master
-
本地分支與關(guān)聯(lián)遠(yuǎn)程分支
git branch --set-upstream-to=origin/<branchename>