廖雪峰Git使用說(shuō)明
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/
通過(guò)終端生成SSH
ssh-keygen -t rsa 連續(xù)回車(chē)
如果Mac電腦安裝了Xcode,自帶有Git功能
配置Git(將來(lái)查看歷史記錄的時(shí)候會(huì)用到,注意一定要配置)
git config 可以列出或修改配置
git config -l? 打印可以配置的相關(guān)屬性
告訴git當(dāng)前用戶(hù)名的姓名和郵件地址
git config —global user.name “張三”? 配置提交者的用戶(hù)名字(全局配置)
git config —globaluser.email“zhangsan@163.com”? 配置提交者的用戶(hù)郵箱
git —version 打印git版本
——————————————————————————————
① 桌面創(chuàng)建倉(cāng)庫(kù)叫MyGit? 利用終端創(chuàng)建: mkdir 目錄名
命令:cd desktop
命令:mkdir MyGit
② 從終端進(jìn)入該文件
命令:cd MyGit
③ 命令:git init
作用:初始化git,里面的有個(gè)隱藏文件叫.git,里面隱藏有一些文件
現(xiàn)象:Initialized empty Git repository in /Users/zhangzenan/Desktop/MyGit/.git/
命令:cd .git
命令:ls -a? 可以查看.git中的所有文件
命令:cd ..
回到MyGit目錄中
注:.git目錄就是Git版本庫(kù)(又叫倉(cāng)庫(kù),repository),被稱(chēng)作為工作區(qū).
如果用Git來(lái)寫(xiě)紅樓夢(mèng),應(yīng)該怎么寫(xiě)?
① 創(chuàng)建一個(gè)文本,內(nèi)容標(biāo)題:紅樓夢(mèng),將文件命名為HLM并保存到MyGit中
命令:git status
作用:打印倉(cāng)庫(kù)狀態(tài)
⑤ 打印git狀態(tài)
命令:git status
終端打印內(nèi)容:
On branch master
Initial commit
Untracked files:
(use "git add ..." to include in what will be committed)
HLM.txt(該名稱(chēng)為紅色)
nothing added to commit but untracked files present (use "git add" to track)
翻譯內(nèi)容:(英語(yǔ)一般,大致意思如下)
位于分支 master 上
初始化提交:
沒(méi)有被追蹤的文件:
(使用"git add .."命令將要被提交的東西包含進(jìn)去)
HLM.txt? 要包含的文件名為HLM.txt
沒(méi)有東西被添加并提交但是目前有未被追蹤的文件(使用"git add"命令來(lái)追蹤)
命令:git add HLM.txt
作用:添加文件到git中(要求Git跟蹤文件,將文件置于Git管理之下)
再次git status
終端打印內(nèi)容(下列顯示為成功內(nèi)容)
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached ..." to unstage)
new file:? HLM.txt? ? (名稱(chēng)變?yōu)榫G色)
⑥ 可以開(kāi)始寫(xiě)紅樓夢(mèng)第一回啦!
例如:第一回 甄士隱夢(mèng)幻識(shí)通靈? 賈雨村風(fēng)塵懷閨秀(樣本)
git commit -m “第一回寫(xiě)完了”? 提交文件到Git庫(kù)中(每次提交都要添加注釋,例如對(duì)文件修改了什么東西.-m后寫(xiě)的是本次提交的說(shuō)明)
⑦ 寫(xiě)紅樓夢(mèng)第二回,然后git status,會(huì)提示使用兩個(gè)命令? 使用git add .? (添加的一個(gè)快捷方式)? 使用git commit -m ***真正提交
⑧ git log 可以查看之前所做的所有事情? 其中有個(gè)commit后面跟一堆東西,這是通過(guò)其他算法算出的一個(gè)唯一標(biāo)識(shí),將來(lái)”回滾”的時(shí)候會(huì)用到這個(gè)標(biāo)識(shí)符
按q退出
⑨ git log --pretty=oneline 可以簡(jiǎn)化log打印的內(nèi)容
—————————————————————————————————————
① 發(fā)現(xiàn)標(biāo)題一寫(xiě)錯(cuò),重新修改,然后git status打印內(nèi)容.? 通過(guò)git diff 查看兩次修改的內(nèi)容差別
② git commit -a -m 修改了標(biāo)題一
—————————————————————————————————————
① 腦袋不清醒寫(xiě)第三回,亂寫(xiě)一通,第二天通過(guò) git diff來(lái)查看區(qū)別
② 我想回滾到上一個(gè)階段,把工作區(qū)中尚未提交的內(nèi)容廢除掉
git checkout HLM.txt? 回滾沒(méi)有add的修改
③ 強(qiáng)制回滾到某一個(gè)版本的代碼(add/commit過(guò)的文件均可回滾) git reset --hard? ******
標(biāo)識(shí)符可以只寫(xiě)前幾位,或者直接粘過(guò)來(lái)
④ 想重新恢復(fù)到之前最新的那個(gè)版本
git reflog 查看之前所有的修改操作,根據(jù)前面的標(biāo)識(shí)符進(jìn)行回滾
—————————————————————————————————————
① 曹雪芹臨時(shí)有事要出差,于是邀請(qǐng)好友幫她寫(xiě)東西,但是不能直接在原稿上修改,因此要?jiǎng)?chuàng)建分支
git branch? 查看分支 ==> 查看稿件作者,默認(rèn)為master
git branch? zhangSan? 創(chuàng)建分支
git checkout zhangSan? 切換到zhangSan對(duì)應(yīng)的分支
接下來(lái)由zhangSan來(lái)搞定
② 寫(xiě)第三回.內(nèi)容:第三回 賈雨村夤緣復(fù)舊職 林黛玉拋父進(jìn)京都.寫(xiě)完后提交git commit -a -m '第三回完成'
git status 打印當(dāng)前狀態(tài)
③ 曹雪芹出差回來(lái),發(fā)現(xiàn)他寫(xiě)的挺好,準(zhǔn)備合并
切換到自己的分支? git checkout master
合并分支 git merge zhangSan
注:SVN創(chuàng)建分支很費(fèi)勁,需要將所有數(shù)據(jù)全部復(fù)制,但是Git只是一瞬間的事情
④ 作者自己寫(xiě)第四回,內(nèi)容:第四回 薄命女偏逢薄命郎 葫蘆僧亂判葫蘆案.寫(xiě)完以后提交一次,然后接到命令出差,讓好友zhangSan繼續(xù)幫她寫(xiě)作
作者走之前提交:git commit -a -m "第四回完事"
zhangSan應(yīng)該切換到自己的分支繼續(xù)寫(xiě)作,寫(xiě)第五回并提交.內(nèi)容:第五回:游幻境指迷十二釵 窗前明月光,意識(shí)地上霜
⑤ 作者回來(lái)以后發(fā)現(xiàn)他寫(xiě)的不怎么滴,準(zhǔn)備自己重新寫(xiě)第五回
先切換自己的分支,接著從第四回往后寫(xiě)第五回,內(nèi)容:第五回 飲仙醪曲演紅樓夢(mèng),然后提交
提交完以后,忽然他發(fā)現(xiàn)他好友寫(xiě)的某些語(yǔ)句特別好,合并分支
現(xiàn)象(出錯(cuò)):因?yàn)閮蓚€(gè)人都寫(xiě)了第五回,合并的時(shí)候會(huì)發(fā)生沖突
解決辦法:打開(kāi)你的文件,會(huì)發(fā)現(xiàn)所有文件都在了,需要手動(dòng)把不滿(mǎn)意的刪了,滿(mǎn)意的留下,改好以后再次提交
注:產(chǎn)生沖突的兩種情況
① 分支合并會(huì)產(chǎn)生沖突
② 多人同時(shí)修改一個(gè)文件會(huì)產(chǎn)生沖突
如果A修改但沒(méi)提交,B來(lái)了,修改并提交.如果這個(gè)時(shí)候A再提交,會(huì)發(fā)生沖突,因?yàn)楫?dāng)前文件狀態(tài)已經(jīng)不是A那時(shí)候的狀態(tài)了.這個(gè)時(shí)候A要手動(dòng)修改沖突的地方并再次提交
⑥ 作者認(rèn)為第一階段結(jié)束,準(zhǔn)備發(fā)布一個(gè)版本0.1
git tag 打印版本
git tag v0.1? 添加一個(gè)0.1版本
本地管理結(jié)束
—————————————————————————————————————
如果頻繁出差會(huì)影響寫(xiě)作效率,如果在外地也能寫(xiě)作就好了
遠(yuǎn)程管理:GitHub(提供免費(fèi)的倉(cāng)庫(kù)管理,而且可以查看別人的倉(cāng)庫(kù),例如FMDB)
GitHub(國(guó)外的):對(duì)于不公開(kāi)的項(xiàng)目是收費(fèi)的,公開(kāi)項(xiàng)目是免費(fèi)的
commits:提交次數(shù)
branches:分支次數(shù)
releases:發(fā)布版本數(shù)
contributors:貢獻(xiàn)者個(gè)數(shù)
技巧:找第三方庫(kù)都在這里找,而且Star超過(guò)3000的最好都看看,常見(jiàn)類(lèi)庫(kù)有1000個(gè),知道的越多寫(xiě)代碼越順暢.
http://git.oschina.net(國(guó)內(nèi)的)
如何將自己的項(xiàng)目上傳到GitHub上?
SVN的checkout只能獲取最新版
創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)
① 注冊(cè)賬號(hào)(github oscine均可)? 通過(guò)終端命令獲取SHH并添加進(jìn)去
② 創(chuàng)建一個(gè)私有項(xiàng)目
項(xiàng)目名隨意(MyGit)
項(xiàng)目介紹隨意(這是我的第一個(gè)項(xiàng)目)
項(xiàng)目語(yǔ)言(Objective-C)
GitIgnore(Objective-C - .gitignore)
開(kāi)源許可證默認(rèn)不管
項(xiàng)目屬性:勾選私有
ReadMe:默認(rèn)勾選
點(diǎn)擊創(chuàng)建完成
③ 右半部分有個(gè)[HTTPS|SSH],選擇SSH并復(fù)制右邊的地址
④ 打開(kāi)Xcode的偏好設(shè)置,選擇Accounts
⑤ 左下角有個(gè)+號(hào),選擇Add Repository
Address:粘貼那個(gè)地址
Type:Git,Subversion就是SVN的簡(jiǎn)寫(xiě)
Authentication:SSH Keys
User Name:默認(rèn)git
Public Key:公鑰
Private Key:私鑰
Passphrase:設(shè)置密碼
⑥ Xcode有個(gè)Source Control,選擇Check Out
找到你添加的網(wǎng)絡(luò)倉(cāng)庫(kù),點(diǎn)擊Next
選擇倉(cāng)庫(kù)的保存路徑,例如Desktop,點(diǎn)擊Download把倉(cāng)庫(kù)從網(wǎng)絡(luò)下載到本地
① 創(chuàng)建一個(gè)新工程,保存到本地倉(cāng)庫(kù)里面
② 創(chuàng)建好以后左側(cè)烈面會(huì)出現(xiàn)一堆?號(hào),表示該文件尚未被追蹤
③ 選擇Source Control,選擇Commit,輸入提交內(nèi)容即可將文件提交到本地倉(cāng)庫(kù)
注:
空:表示”無(wú)修改”
A:表示”新增”,
C:表示”沖突”,
D:表示”刪除”,
G:表示”合并”,
I :表示”忽略”,
M:表示”改變”,
R:表示”替換”,
X:表示”未納入版本控制,但被外部定義所用”,
?:表示”未納入版本控制”,
! :表示”該項(xiàng)目已遺失(被非SVN命令刪除)或是不完整”,
~:表示”版本控制下的項(xiàng)目與其他類(lèi)型的項(xiàng)目重名”
④ 給StoryBoard添加一個(gè)按鈕并設(shè)置其”上左右”為20.因?yàn)楦牧藘?nèi)容,因此會(huì)出現(xiàn)M.手動(dòng)提交到本地倉(cāng)庫(kù)中.
提交過(guò)程中選中那個(gè)文件,可以查看哪里被修改了.結(jié)論是:StoryBoard本質(zhì)就是一個(gè)XML文件
⑤ Push:將本地倉(cāng)庫(kù)Push到遠(yuǎn)程倉(cāng)庫(kù)中
Pull:把遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容加載回來(lái).
注:Push和Pull是一對(duì),多人合作的時(shí)候常用
⑥ 給按鈕綁定方法用來(lái)改變按鈕坐標(biāo),然后再次提交
⑦ 打開(kāi)”輔助面板”右側(cè)的按鈕,可以用來(lái)對(duì)比任意兩個(gè)版本的內(nèi)容差別
按鈕1(Comparison):查看兩個(gè)版本的內(nèi)容差別
按鈕2(Blame):查看某段代碼是誰(shuí)提交的
按鈕3(Log):按照時(shí)間查看
如果整體項(xiàng)目已經(jīng)完成,但是臨時(shí)想添加一個(gè)新功能.應(yīng)該創(chuàng)建一個(gè)新分支再實(shí)現(xiàn),如果試驗(yàn)失敗能保證代碼能還原
① 創(chuàng)建分支:Source Controller -> Master -> New Branch,創(chuàng)建完畢會(huì)自動(dòng)切換到新的分支,完善按鈕的點(diǎn)擊事件
② 如果感覺(jué)寫(xiě)的沒(méi)問(wèn)題就可以合并分支,選擇Merge Into Branch.過(guò)程當(dāng)中可以決定是否合并某些代碼,下方有開(kāi)關(guān)可以控制
③ 合并完以后會(huì)自動(dòng)切換到Into選擇的那個(gè)分支.
④ 如果后悔合并想還原怎么辦?Xcode只提供了有限功能,更多功能需要依賴(lài)終端命令
⑤ 如果電腦不小心死機(jī)打不開(kāi)了怎么辦?從遠(yuǎn)程服務(wù)器把倉(cāng)庫(kù)下載回來(lái).
通過(guò)終端命令跳到desktop
git clonegit@git.oschina.net:UILabel/MyGit.git回車(chē)即可? 如果讓輸yes就輸yes
注:Git將遠(yuǎn)程倉(cāng)庫(kù)clone到本地,會(huì)把倉(cāng)庫(kù)中的所有東西都弄出來(lái),包括版本記錄
作者:UIButton
鏈接:http://www.reibang.com/p/d9fd918c7efb
來(lái)源:簡(jiǎn)書(shū)
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)犹撒,非商業(yè)轉(zhuǎn)載請(qǐng)注明出處折联。