首先要明白四個(gè)空間:遠(yuǎn)程倉(cāng)庫(kù)簇抵,本地倉(cāng)庫(kù),本地緩存區(qū)妻味,本地工作區(qū)正压;
遠(yuǎn)程倉(cāng)庫(kù):該倉(cāng)庫(kù)是一個(gè)集中的數(shù)據(jù)倉(cāng)庫(kù),正常情況下责球,所有參與開(kāi)發(fā)的人員的代碼最后都會(huì)提交到該倉(cāng)庫(kù)的自己的分支上焦履,再由具有合并權(quán)限的人員來(lái)合并所有分支拓劝;
本地倉(cāng)庫(kù):一般來(lái)說(shuō),本地倉(cāng)庫(kù)是由開(kāi)發(fā)人員通過(guò)clone復(fù)制遠(yuǎn)程倉(cāng)庫(kù)中的某個(gè)分支的數(shù)據(jù)到本地而產(chǎn)生的嘉裤,但git不是集中式的版本控制郑临,而是分布式的版本控制,他們的區(qū)別就是屑宠,分布式版本控制中每一個(gè)倉(cāng)庫(kù)都能具有遠(yuǎn)程倉(cāng)庫(kù)的作用厢洞,而集中式的版本控制中遠(yuǎn)程倉(cāng)庫(kù)是不能被其他參與開(kāi)發(fā)的人備份的;
本地緩存:在本地修改數(shù)據(jù)后(一般是指我們?cè)诰庉嬈髦行薷哪硞€(gè)文件)典奉,git監(jiān)測(cè)到該數(shù)據(jù)與本地?cái)?shù)據(jù)倉(cāng)庫(kù)的數(shù)據(jù)不一致躺翻,會(huì)提示將該修改增加(add)到緩存區(qū),緩存區(qū)中的文件可以用來(lái)與本地倉(cāng)庫(kù)中的文件進(jìn)行比較(difftool)卫玖,這個(gè)用處目前感覺(jué)主要用于當(dāng)我們修改很多文件時(shí)公你,最后不記得自己修改了那些文件,如果沒(méi)有緩存區(qū)假瞬,我們直接提交的話陕靠,很容易會(huì)導(dǎo)致很多疏忽。我們?cè)诰庉嬈髦行薷牧宋募螅ū镜毓ぷ鲄^(qū))脱茉,本地緩存中不包含我們的修改的剪芥,只有當(dāng)我們把本次的修改add到緩存區(qū)的時(shí)候,緩存區(qū)中才有本次的修改琴许,這表明我們的每一次修改都必須手動(dòng)add到本地緩存中才能在使用commit命令時(shí)將其添加到本地倉(cāng)庫(kù)税肪。
本地工作區(qū):也就是我們的編輯器的空間;
現(xiàn)在開(kāi)始使用git的開(kāi)發(fā)流程了:
1.初始化本地倉(cāng)庫(kù)虚吟,打開(kāi)終端寸认,輸入以下內(nèi)容:
? ?git init
?該命令會(huì)在本地的當(dāng)前目錄創(chuàng)建一個(gè)空的本地倉(cāng)庫(kù),也就是第二步中從遠(yuǎn)程倉(cāng)庫(kù)克隆的項(xiàng)目被放置的地方串慰;
1.克隆遠(yuǎn)程倉(cāng)庫(kù)項(xiàng)目到本地:
? git clone +遠(yuǎn)程倉(cāng)庫(kù)的地址(例子如下)
?git clone git://github.com/schacon/ticgit.git
執(zhí)行完該命令后偏塞,本地倉(cāng)庫(kù)中應(yīng)具有遠(yuǎn)程倉(cāng)庫(kù)中默認(rèn)的master分支中的數(shù)據(jù);
2.進(jìn)入該項(xiàng)目的目錄邦鲫,查看分支狀態(tài)灸叼;
? cd 目錄名
? git status(查看當(dāng)前狀態(tài),這個(gè)狀態(tài)包括以下數(shù)據(jù):當(dāng)前在那個(gè)分支上庆捺,當(dāng)前緩存區(qū)數(shù)據(jù)狀態(tài)(change to commit)古今,修改了數(shù)據(jù)但是沒(méi)有add到緩存區(qū)的文件狀態(tài)(change but not update),當(dāng)前倉(cāng)庫(kù)中還沒(méi)被追蹤的文件(Untracked file))
可以在終端中看到目前在哪一個(gè)分支上(默認(rèn)是master)滔以,一般我們不應(yīng)該在master分支上開(kāi)發(fā)捉腥,應(yīng)該在自己的分支上開(kāi)發(fā),所以需要?jiǎng)?chuàng)建自己的分支你画,兩種方式:
2.1 git checkout -b 分支名抵碟,創(chuàng)建當(dāng)前分支的備份分支桃漾,并切換到該分支;
2.2 git branch 分支名 創(chuàng)建分支
? ? ? git checkout 分支名 切換分支
3.使用studio打開(kāi)該項(xiàng)目拟逮,打開(kāi)后可能會(huì)發(fā)現(xiàn)該項(xiàng)目不能運(yùn)行或者編譯不通過(guò)撬统,這需要你找到其原因,目前我遇到的都是一些gradle版本不符合或者該項(xiàng)目中的引用資源路徑不對(duì)之類的敦迄,稍作修改即可恋追;
4.在studio中修改某個(gè)文件,然后在終端中執(zhí)行g(shù)it status罚屋,這個(gè)時(shí)候你會(huì)發(fā)現(xiàn)在對(duì)應(yīng)的change to update狀態(tài)下表明該文件被修改了(modified)苦囱,但是緩存中還沒(méi)有該文件,目前該文件的修改只限于工作空間(編輯器)沿后,此時(shí)如果要提交該修改沿彭,需要先將該文件add到緩存區(qū),執(zhí)行
git add 文件名
此時(shí)可以再執(zhí)行g(shù)it status 來(lái)查看當(dāng)前本地的狀態(tài)尖滚,你會(huì)發(fā)現(xiàn)在change to commit狀態(tài)下存在該文件了,此時(shí)你可以查看緩存區(qū)的該文件和本地倉(cāng)庫(kù)中該文件的差異:
git difftool --cached 文件名
上述命令表示瞧柔,對(duì)比緩存區(qū)和本地倉(cāng)庫(kù)中該文件的差異漆弄,注意的是,不是對(duì)比工作空間中文件造锅;該命令后面不加文件名時(shí)撼唾,表示對(duì)比所有緩存區(qū)的文件;此時(shí)如果在對(duì)比工具中修改了文件內(nèi)容哥蔚,僅僅是修改了工作空間的文件倒谷,如果要將該修改提交,則還要將該文件add到緩存區(qū);
確定修改好了之后糙箍,就可以提交了:
git commit?
該命令會(huì)將緩存區(qū)中的文件修改提交到本地倉(cāng)庫(kù)渤愁,執(zhí)行該命令后會(huì)讓我們輸入本次提交的相關(guān)說(shuō)明;
這樣我們的修改就被提交到本地倉(cāng)庫(kù)中深夯,可以執(zhí)行g(shù)it log命令來(lái)查看我們的提交記錄抖格,其中commit號(hào)是我們回退時(shí)候需要的參數(shù);
如果此時(shí)我們發(fā)現(xiàn)自己忘記提交一些文件咕晋,又不想再創(chuàng)建一個(gè)commit雹拄,可以撤銷上一次的提交,
git commit -amend
然后再add遺漏的文件到緩存區(qū)掌呜,再提交滓玖;
確認(rèn)所有修改都被提交之后,便可以將本地倉(cāng)庫(kù)的文件提交到遠(yuǎn)程倉(cāng)庫(kù)中质蕉,即:
git push origin 倉(cāng)庫(kù)名字(可以通過(guò)git branch -a來(lái)查看所有分支)
一些命令總結(jié):
checkout:1.切換分支==》git checkout 分支名
? ? ? ? ? ? ? ? ?2.回撤修改;
? ? ? ? ? ? ? ? ? ? git checkout filename 撤銷filename文件在工作空間中的修改,
? ? ? ? ? ? ? ? ? ? git checkout . ? ? ??注意到 checkout 后面有個(gè)”.”今野,就是代表所有文件的意思把所有文件都撤回剛才在工作區(qū)上的改動(dòng)耘沼。
? ? ? ? ? ? ? ? ? ? git checkout cimmit號(hào) filename 撤銷目標(biāo)文件的修改,使文件暫存區(qū)和工作區(qū)都回到某一次提交時(shí)的狀態(tài)顽腾;
reset :撤銷操作,但是不同的參數(shù)會(huì)導(dǎo)致不同的效果,常用如下:
? ? ? ? ? ? ? ? ? ? git reset ?HEAD filename 回退某個(gè)文件到前一次的提交的狀態(tài)棒卷,僅僅是暫存區(qū)的改變,工作空間不會(huì)修改祝钢,其中HEAD可以理解為上一次提交的commit號(hào)比规,filename不加的時(shí)候表示回退所有文件;
? ? ? ? ? ? ? ? ? ? git reset –soft ? ??意味著工作區(qū)不會(huì)收到影響拦英,暫存區(qū)回到了那個(gè)節(jié)點(diǎn)的commit時(shí)的狀態(tài)蜒什。也就是說(shuō)你在提交后所做的修改不會(huì)被沒(méi)收;
? ? ? ? ? ? ? ? ? ?git reset –hard ? ?這個(gè)用法和剛才的類似疤估,就是多了個(gè)–hard灾常,意味著你工作區(qū)的代碼也會(huì)回檔,和暫存區(qū)保持一致铃拇,都回到了那個(gè)節(jié)點(diǎn)的commit時(shí)的狀態(tài)钞瀑。
git學(xué)習(xí)資料:?