Git代碼管理是分布式管理方式系統(tǒng).優(yōu)點(diǎn)在于其極高的安全性和非常強(qiáng)大的分支管理.一. Git整體理解

-
工作區(qū)(working directory): 就是本地的代碼區(qū),電腦能看到的目錄,就是工作區(qū). -
暫存區(qū)(Index):工作區(qū)下有一個隱藏的'.git'文件,其主要作用是存儲Git自動創(chuàng)建的第一個master分支,還有指向master分支的HEAD指針.還有一個最重要的stage的暫存區(qū).需要提交的文件修改通通放到暫存區(qū),然后一次性提交到暫存區(qū)的所有修改. -
本地倉: 本地的個人倉庫.管理著個人的代碼的版本信息. -
遠(yuǎn)程倉: 線上的倉庫.管理著推送到服務(wù)器的代碼版本.
過程1: 由工作區(qū)<->暫存區(qū)
- 工作區(qū)->暫存區(qū):
用git add .添加所有的修改或者git add <文件名>添加單個指定的文件修改到暫存區(qū)中. - 暫存區(qū)->工作區(qū):
(1)git rm --cached "文件路徑"不刪除物理文件,緊將git的緩存刪除.
(2)git rm --f "文件路徑"不僅將該文件從緩存中 刪除,還將物理文件刪除(不會放到垃圾桶).
例如:git rm -rf .DS_Store
(3)git reset <版本號>利用版本庫清空暫存區(qū).原理:將當(dāng)前分支重設(shè)(reset)到指定的<commit>或者HEAD(默認(rèn),如果不指定commit,默認(rèn)是HEAD,即最新的一次提交)
--hard
git reset --hard <commit號>重設(shè)(reset)index和working directory,自從<commit>以來在working directory中的任何改變都被丟棄,并把HEAD指向<commit>
--soft
git reset --soft <commit號>index和working directory中的內(nèi)容不作任何改變,僅僅把HEAD指向<commit>。這個模式的效果是,執(zhí)行完畢后,自從<commit>以來的所有改變都會顯示在git status的"Changes to be committed"中
過程2:由暫存區(qū)<->本地倉庫
暫存區(qū)->本地倉庫
用git commit -m '本次commit的描述'本地倉庫->暫存區(qū)
(1)git reset <版本號>利用版本庫清空暫存區(qū).原理:將當(dāng)前分支重設(shè)(reset)到指定的<commit>或者HEAD(默認(rèn),如果不指定commit,默認(rèn)是HEAD,即最新的一次提交)
(2) --hard
git reset --hard <commit號>重設(shè)(reset)index和working directory,自從<commit>以來在working directory中的任何改變都被丟棄,并把HEAD指向<commit>
(3) --soft
git reset --soft <commit號>index和working directory中的內(nèi)容不作任何改變,僅僅把HEAD指向<commit>。這個模式的效果是,執(zhí)行完畢后,自從<commit>以來的所有改變都會顯示在git status的"Changes to be committed"中.退回到該次commit提交,但是該版本之后所有的修改都沒有了,如果想要恢復(fù),就要試圖從還未關(guān)閉的終端中找到你想要的退回的版本號,或者用git reflog查找你想要的commit版本號.繼續(xù)用git reset --soft <commit號>回退
過程3: 由本地倉->遠(yuǎn)程倉庫
用git push
說明: 三種git add的區(qū)別
-
git add .提交新文件(new)和被修改(modified)文件,不包括被刪除(deleted)文件 -
git add -u提交被修改(modified)和被刪除(deleted)文件,不包括新文件(new) -
git add -A: 提交所有變化
二. 在本地創(chuàng)建一個Git管理的項(xiàng)目
- 從線上拉項(xiàng)目到本地
用git clone "項(xiàng)目的地址路徑"克隆一個git管理的項(xiàng)目到本地 - 本地項(xiàng)目上傳線上
git init
git remote add origin "地址url"
三. Git上的常用查看操作
1.查看文本內(nèi)容
cat <文件名>
2.查看git的狀態(tài)
git status會告訴你在當(dāng)前的分支上git的情況(有沒有修改,修改的文件是什么等)
learngit git:(master) git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
3.查看更詳細(xì)的文件修改
git diff 查看所有文件的不同
git diff <文件名> 查看指定文件的不同
diff 是difference的縮寫.只能查看還未add(還沒加入到暫存區(qū))的修改
4.查看所有的commit信息
git log
git log --pretty=oneline 更簡潔的查看log信息(只有commit號和描述信息)
5.查看所有的git操作過的命令,可以找到刪除了的commit號
git reflog
6.查看分支合并圖
git log --graph
四. 沖突處理
<<<<<<<HEAD
1 + 1 = 2 這個區(qū)間內(nèi)的內(nèi)容是當(dāng)前開發(fā)者修改的
=======
1 + 2 = 3 這個區(qū)間內(nèi)的內(nèi)容是其他開發(fā)者修改的
>>>>>>>
需要人工判斷具體是刪除或者保留哪一個修改內(nèi)容.并且把1,2,3行提示刪除掉.
五. Git分支操作
- 分支基本操作
分支的創(chuàng)建和切換
git branch "分支名"創(chuàng)建一個分支git checkout "分支名"切換到該分支
創(chuàng)建并切換到該分支git checkout -b "分支名"列出所有的分支
git branch列出本地分支 用*標(biāo)記當(dāng)前的分支
git branch -a列出遠(yuǎn)程分支合并分支
git merge "分支名"合并指定分支到當(dāng)前分支
git rebase "分支名"合并指定分支到當(dāng)前分支
兩者的區(qū)別在于會不會保留分支操作的記錄,前者記錄,后者不記錄.建議用merge刪除分支
刪除本地分支:git branch -d "分支名"
強(qiáng)制刪除本地分支:git branch -D "分支名"
刪除遠(yuǎn)程分支:git push origin :<分支名>(危險(xiǎn)命令哦)
如果提示the branch XXX is not fully merged(XXX分支有沒有合并到當(dāng)前分支的內(nèi)容)本地新建了一個分支要推送到線上,需要設(shè)置關(guān)聯(lián)或者追蹤.
第一次push:git push origin 本地分支名:遠(yuǎn)程分支名遠(yuǎn)程端生成了一個新的分支,拉取到本地.
git checkout -b 本地分支要起的名字 origin/遠(yuǎn)程分支名
六. bug分支
用issue作為分支的開頭標(biāo)記,當(dāng)有一個bug出現(xiàn)需要改的時候,先拉取一個issue分支,修改并合并到開發(fā)分支上,然后刪除issue分支.
七. feature分支
- 開發(fā)新的功能的時候,最好拉去一個新的分支,以feature開頭.
- 丟掉一個沒有合并過的分支,即刪除分支.(當(dāng)新功能正在或者已經(jīng)開發(fā)完,領(lǐng)導(dǎo)突然說不要了...心累)
git branch -D <分支名>強(qiáng)制刪除該分支內(nèi)容
八. 暫存的使用
-
git stash暫存 -
git stash list查看所有的暫存 -
git stash apply從暫存開始執(zhí)行,但是stash內(nèi)容不會刪除. -
git stash drop刪除暫存 -
git stash pop恢復(fù)暫存的同時刪除暫存 -
git stash apply stash@{0}恢復(fù)指定的暫存
九. 遠(yuǎn)程倉的操作
- 查看遠(yuǎn)程倉的信息
git remote
git remote -v顯示更詳細(xì)的信息 - 將分支推送到遠(yuǎn)程倉
git push origin 本地分支名:遠(yuǎn)程分支名
十. 標(biāo)簽的使用
標(biāo)簽只能在master分支上使用. 盡量寫清楚所有的修改,為了萬一的版本回退做好描述工作.
1.git tag <name>新建一個標(biāo)簽
2.git tag -a <name> -m "指定的標(biāo)簽信息"
3.git show <tag名字> 查看詳細(xì)的tag信息
4.git tag 查看所有的tag名字
5.git tag -d <標(biāo)簽名字>刪除一個標(biāo)簽
6.git push origin <標(biāo)簽名>推送標(biāo)簽到遠(yuǎn)程
7.git push origin --tags一次性推送所有未推送的標(biāo)簽
8.刪除遠(yuǎn)程倉上的tag
- 先刪除本地的標(biāo)簽:
git tag -d <tag名字> - 然后刪除遠(yuǎn)程端的標(biāo)簽:
git push origin :tag名字
十一 .gitignore的使用
iOS 用到的.gitignore https://github.com/github/gitignore/blob/master/Objective-C.gitignore
在工作區(qū)創(chuàng)建一個名字為
.gitignore文件.把要忽略的文件名字填進(jìn)去,并提交到Git.Git會自動忽略這些文件的修改.把鏈接中的內(nèi)容信息copy到.gitignore文件中.記住一定要把
.gitignore拉取到具體的分支上才有用.git check-ignore檢查ignore內(nèi)容git add -f <文件名>即使在gitignore中文件,也可以提交.UserInterfaceState.xcuserstate,Breakpoints_v2.xcbkptlist文件的忽略
在. gitignore文件中加入
工程名.xcodeproj/project.xcworkspace/xcuserdata/電腦名.xcuserdatad/UserInterfaceState.xcuserstate
工程名.xcodeproj/xcuserdata/電腦名.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
如果配置完之后還沒有忽略,那么就要清空緩存.
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
十二 Git 配置全局信息
1.配置作者名稱
git config --global user.name "Your Name"
2.配置個人郵箱
git config --global user.email "email@example.com"
3.配置git的顏色(文件名會標(biāo)記上顏色)
git config --global color.ui true
十三. Git上需要注意的單詞
- repository 倉庫
- software 軟件
- mode 模式,風(fēng)格
- insertion 插入
- commit 把...托給
- stage 原意:舞臺,Git中是暫存區(qū)的意思.
- checkout 檢出
- branch 分支
- modified 改進(jìn)的,修改的
- unstaged 還未加入到暫存區(qū)的 un + stage(暫存區(qū))
- untracked 無足跡的,還沒有加入git管理的
- origin 起源,起點(diǎn)
- reset 重設(shè)
- rebase
- merge 合并
- remote 遙遠(yuǎn)的,遠(yuǎn)程的
- HEAD 表示當(dāng)前版本
- HEAD^ 上一個版本
- HEAD^^ 上兩個版本
- HEAD~100 上100個版本
十四. Linux的一些簡單操作和一些符號的解釋
命令操作
- 目錄/文件的操作
-
mkdir "目錄名"在當(dāng)前路徑下創(chuàng)建一個文件夾 -
mvdir "目錄1" "目錄2"移動或者重命名一個目錄 (如果目錄2不存在,就直接修改目錄1的名稱為目錄2) -
rmdir "目錄名"刪除一個目錄 -
touch創(chuàng)建一個文件 -
vim "文件名編輯文件,如果文件不存在,就創(chuàng)建并進(jìn)入編輯. - 刪除一個文件
sudo rm -rf <文件名>在上帝權(quán)限下刪除,可以刪除一個該用戶沒有權(quán)限的文件(包括系統(tǒng)文件),不建議使用
rm <文件名>能刪除當(dāng)前用戶權(quán)限下的文件
- 轉(zhuǎn)換目錄
-
cd + "路徑"進(jìn)入該文件目錄下(也可以將文件直接拖進(jìn)來) -
cd ..回到上級目錄 -
cd .當(dāng)前目錄 cd / 回到根目錄 -
cd test.rtf不可用. 不能cd到文件里.只能cd到目錄.
報(bào)錯信息:-bash: cd: test.rtf: Not a directory
- 拷貝/移動/刪除
cp "需要拷貝的文件路徑" "目標(biāo)地址路徑"
拷貝文件 例如: cp /Users/goulela/Desktop/test.rtf /Users/goulela/Desktop/文件夾2
mv "需要移動的文件路徑" "目標(biāo)地址路徑"
移動文件 例如: mv 文件夾2 /Users/goulela/Desktop/創(chuàng)建文件夾/文件夾 - 顯示操作
file "文件名"顯示文件的類型wc "文件名"統(tǒng)計(jì)文件的字符數(shù),詞數(shù),行數(shù)pwd查看當(dāng)前所在的目錄ls顯示當(dāng)前路徑下有什么文件ls + "目錄名"顯示特定的路徑下有什么文件ls -w顯示中文ls -l詳細(xì)信息ls -a顯示所有文件,包括隱藏文件
- 時間操作
-
date顯示系統(tǒng)的當(dāng)前日期和時間 -
cal顯示日歷
- 網(wǎng)絡(luò)與通信
-
ping "url"給一個遠(yuǎn)程主機(jī)發(fā)送 回應(yīng)請求 - 終止ping打印
control + c -
who列出當(dāng)前登錄的所有用戶 -
whoami顯示當(dāng)前正進(jìn)行操作的用戶名
十五. 符號解釋
-
-r就是向下遞歸,不管有多少級目錄,一并刪除 -
-f就是直接強(qiáng)行刪除,不作任何提示的意思 -
-rf向下遞歸強(qiáng)制刪除