工作原理
工作區(qū):倉(cāng)庫(kù)文件夾里除.git目錄以外的
版本庫(kù):.git目錄,用于存儲(chǔ)版本信息
<ul>
<li>暫緩區(qū)(stage)</li>
<li>分支(master):git自動(dòng)創(chuàng)建的第一個(gè)分支</li>
<li>HEAD指針:用于指向當(dāng)前分支</li>
</ul>
git add :吧文件修改或者添加的文件添加到暫緩區(qū)
git commit:吧暫緩區(qū)的所有內(nèi)容提交到當(dāng)前分支
1.初始化一個(gè)代碼倉(cāng)庫(kù)
git init
2.如果使用git,必須配置用戶名和郵箱,給當(dāng)前的git倉(cāng)庫(kù)配置用戶名和郵箱
<ul>
<li>git config user.name "用戶名"
</li>
<li>git config user.email "郵箱"
</li>
</ul>
配置全局的用戶名和郵箱
git config --global user.name "用戶名"
git config --global user.email "郵箱"
3.初始化項(xiàng)目
touch main.m
創(chuàng)建了main.m
git add main.m
將文件添加暫緩區(qū)
git commit -m
初始化項(xiàng)目:將在緩存區(qū)的所有內(nèi)容提交到本地版本庫(kù),清空暫緩區(qū)
git add.
將在工作區(qū)所有不在暫緩區(qū)的所有內(nèi)容添加到暫緩區(qū)
注意:添加的文件或者修改的文件都要通過(guò)add命令添加到暫緩區(qū).
4.查看文件狀態(tài)
git status
紅色:該文件被添加或者被修改,但是沒(méi)有添加到git的暫緩區(qū)
綠色:該文件在暫緩區(qū),但是沒(méi)有提交到本地版本庫(kù)
5.給命令行起別名
git config alias.別名 "原名"
git config alias.st "status"
git config --global alias.st "status"
6.刪除文件
git rm person.m
將person刪除
7.查看版本信息
git log
->版本號(hào)是有sha1算法生成的40位哈希值
git reflog
可以查看所有版本回退的操作
8.版本回退
git reset --hard HEAD
:回到當(dāng)前版本
git reset --hard HEAD^
:回到上一個(gè)版本
git reset --hard HEAD-100
:回到前一百個(gè)版本
git reset --hard 版本號(hào)(前5位)
二.共享版本庫(kù)
<ul>
<li>git服務(wù)器搭建非常繁瑣</li>
<li>可以把代碼托管到github/OSChina上</li>
<li>一個(gè)文件夾/U盤</li>
</ul>
1.一個(gè)文件夾作為版本庫(kù)
git init --bare
2.將共享版本庫(kù)的所有內(nèi)容下載到本地
git clone 共享版本庫(kù)地址
3.忽略文件
touch .gitignore
具體忽略上github上面找
版本回退 多人操作時(shí) 可以采用雙方都回退的方法.
git reset --hard HEAD^
git push -f
版本備份
- 1.0版本開(kāi)發(fā)完畢,將1.0版本上傳到AppStore,對(duì)1.0版本進(jìn)行備份(打上標(biāo)簽)
git tag -a weibo1.0 -m "這是1.0版本"
查看taggit tag
2.需要將標(biāo)簽push到共享版本庫(kù)
git push origin weibo1.0
3.開(kāi)始2.0版本的開(kāi)發(fā)
4.發(fā)現(xiàn)1.0版本有bug,在經(jīng)理的文件夾下創(chuàng)建一個(gè)文件夾,用于修復(fù)bug,將共享版本庫(kù)所有內(nèi)容clone
5.將當(dāng)前的代碼轉(zhuǎn)為1.0標(biāo)簽,創(chuàng)建分支,并切換到該分支
git checkout weibo1.0
git checkout -b weibo1.1 fixbug
:創(chuàng)建分支,并切換到該分支
6.在分支中修復(fù)bug,將修復(fù)好的版本打上tag,并上傳到共享版本庫(kù)
同上
7.跟當(dāng)前正在開(kāi)發(fā)的2.0版本進(jìn)行合并
source Controller ->pull->weibo1.1
8.刪除分支
git branch
查看當(dāng)前在哪個(gè)分支
git branch -r
查看本地版本庫(kù)的分支
git checkout master
切換分支master
git branch -d weibo1.1fixbug
:刪除本地的分支
git branch -r -d origin/weibo1.1fixbug
:刪除本地版本庫(kù)分支
git push origin --delete weibo1.1fixbug
演示團(tuán)隊(duì)多人開(kāi)發(fā)
以下列舉三個(gè)角色來(lái)進(jìn)行演示多人開(kāi)發(fā).分別為項(xiàng)目經(jīng)理Manager
,程序猿一CoderOne
,程序猿二CoderTwo
.
1.創(chuàng)建文件夾Manager
,CoderOne
,CoderTwo
.
2.項(xiàng)目經(jīng)理搭建項(xiàng)目結(jié)構(gòu)
2.1 項(xiàng)目經(jīng)理從共享庫(kù)clone項(xiàng)目到本地
命令: git clone /Users/liwx/Desktop/Tmp/Git/TeamServer
2.2 項(xiàng)目經(jīng)理搭建好項(xiàng)目結(jié)構(gòu),使用push
,提交到共享庫(kù).
1.進(jìn)入項(xiàng)目經(jīng)理的Manager/TeamServer文件夾下創(chuàng)建iOS,Android,Server文件夾
命令: mkdir iOS Android Server
2.項(xiàng)目經(jīng)理進(jìn)入iOS文件夾內(nèi)創(chuàng)建main.m,并提交到共享庫(kù)
1:touch main.m
2: git add .
3: git commit -m "創(chuàng)建main.m文件"
4: git push
3.CoderOne和CoderTwo分別clone下載TeamServer倉(cāng)庫(kù)到各自的文件夾
命令: git clone /Users/liwx/Desktop/Tmp/Git/TeamServer
4.演練CoderOne新增文件CoderTwo更新
4.1 CoderOne新增文件,并提交共享庫(kù)
<pre>1: touch Person.h
2: git add .
3: git commit -m "創(chuàng)建Person.h文件"
4: git push</pre>
4.2 CoderTwo更新倉(cāng)庫(kù)
git pull
5.CoderOne刪除文件,CoderTwo同步更新
5.1 CoderOne新增文件,并提交共享庫(kù)
<pre>git rm Person.h
2: git commit -m "刪除Person.h文件"
3: git push</pre>
5.2 CoderTwo更新倉(cāng)庫(kù)
git pull
6.超時(shí)和沖突演練,CoderOne和CoderTwo同時(shí)修改main.m第一行內(nèi)容
6.1 CoderOne先修改完提交到共享庫(kù)
<pre>1: git add .
2: git commit -m "CoderOne修改了main.m第一行內(nèi)容"
3: git push</pre>
6.2 CoderTwo后修改完提交到共享庫(kù),執(zhí)行到第3步此時(shí)會(huì)提示文件過(guò)期(超時(shí))fetch first
<pre>1: git add .
2: git commit -m "CoderTwo修改了main.m第一行內(nèi)容"
3: git push</pre>
6.3 CoderTwo執(zhí)行g(shù)it pull更新時(shí),產(chǎn)生沖突
git pull
main.m沖突內(nèi)容
<<<<<<< HEAD// CoderTwo修改了main.m第一行內(nèi)容=======// CoderOne修改main.m文件>>>>>>> 081af32dbb358ba0470ae0ff996987b050037027
修改main.m沖突后
// CoderTwo修改了main.m第一行內(nèi)容// CoderOne修改main.m文件
6.4 CoderTwo解決沖突后提交到共享庫(kù)
<pre>1: git add .
2: git commit -m "解決main.m沖突"
3: git push</pre>
Git補(bǔ)充
關(guān)于忽略文件
在真實(shí)開(kāi)發(fā)中,配置.gitignore文件 频敛, 去github里面搜索gitignore選擇Objective-C.gitignore版本的斧吐,拷貝到本地倉(cāng)庫(kù)即可,記得添加到本地版本庫(kù)
常見(jiàn)問(wèn)題
fetch first 代表當(dāng)前文件過(guò)期
,需要從遠(yuǎn)程共享庫(kù)更新命令: git pull
4.Git常用命令
4.1 查看清钥、添加、提交淋样、刪除厌漂、找回谒府,重置修改文件
<pre>查看:git show
顯示某次提交的內(nèi)容: git show $id
添加: git add <file>
將工作文件修改提交到本地暫存區(qū):git add .
將所有修改過(guò)的工作文件提交暫存區(qū)刪除 :git rm <file>
從版本庫(kù)中刪除文件:git rm <file> --cached
重置 git reset <file>
從暫存區(qū)恢復(fù)到工作文件:git reset -- .
從暫存區(qū)恢復(fù)到工作文件:git reset --hard
恢復(fù)最近一次提交過(guò)的狀態(tài)艇纺,即放棄上次提交后的所有本次修改恢復(fù) git revert <$id>
</pre>