git入門指北


git是分布式版本控制系統(tǒng)桥温,啥是分布式的呢聘芜,就是每一個(gè)用戶的主機(jī)上都有一個(gè)版本庫,可以在本地進(jìn)行版本管理趋厉。如果需要多人合作的時(shí)候寨闹,就再通過中央服務(wù)器進(jìn)行版本交換。和集中式的版本控制的區(qū)別就是君账,集中式的版本管理是只在遠(yuǎn)程繁堡,每一次commit都必須聯(lián)網(wǎng),這就有網(wǎng)絡(luò)的時(shí)延大大滴,而且當(dāng)中央服務(wù)器掛掉的時(shí)候所有人都掛了椭蹄,因?yàn)橥暾麄}庫只存在于服務(wù)器闻牡。

git版本庫
版本庫可以理解為Git倉庫,這個(gè)目錄下的所有文件都會被Git管理起來绳矩,每個(gè)文件的修改罩润,刪除,Git都能跟蹤翼馆,以便任何時(shí)刻都可以追蹤歷史割以,或者在將來某個(gè)時(shí)刻還原。

命令:
在一個(gè)目錄下应媚,git init就可以把此目錄變成Git可以管理的目錄严沥。

git工作目錄

這里有幾個(gè)概念:
工作區(qū):電腦里能看到的目錄,嗯中姜,就是單純的目錄
版本庫(Repository):Git的版本庫里存了很多東西消玄,其中最重要的就是稱為stage(或者叫index)的暫存區(qū),還有Git為我們自動創(chuàng)建的第一個(gè)分支master扎筒,以及指向master的一個(gè)指針叫HEAD莱找。
把文件往Git版本庫里添加的時(shí)候,是分兩步執(zhí)行的:

  • 第一步是用git add file把文件添加進(jìn)去嗜桌,實(shí)際上就是把文件修改添加到暫存區(qū)奥溺;
    同理rm 是刪除,git rm file 是將文件在暫存區(qū)內(nèi)刪除

  • 第二步是用git commit -m "commit message"提交更改骨宠,實(shí)際上就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支浮定。

因?yàn)槲覀儎?chuàng)建Git版本庫時(shí),Git自動為我們創(chuàng)建了唯一一個(gè)master分支层亿,所以桦卒,現(xiàn)在,git commit就是往master分支上提交更改匿又。

你可以簡單理解為方灾,需要提交的文件修改通通放到暫存區(qū),然后碌更,一次性提交暫存區(qū)的所有修改裕偿。

如果有一些文件沒有add到暫存區(qū),那么這些文件也是commit不上去的哦~

但是難免會犯錯(cuò)

  • Case1:當(dāng)改亂了工作區(qū)的修改痛单,想直接丟棄工作區(qū)的修改嘿棘,回退到clean的狀態(tài),用命令git checkout -- file
  • Case2:改亂了工作區(qū)的修改旭绒,并且add到暫存區(qū)了鸟妙。首先焦人,將暫存區(qū)的內(nèi)容回退到add前的版本git reset HEAD file,其次丟棄工作區(qū)的修改git checkout -- file
  • Case3:已經(jīng)提交(add)了修改至?xí)捍鎱^(qū)重父,并且commit到版本庫了花椭,使用git reset --hard commit_id回退到commit_id的版本。commit_id是怎樣獲得的呢房午,通過git log,git log --pretty=online,git reflog來查看个从。
    git loggit reflog的區(qū)別是,git log當(dāng)回退到某個(gè)版本時(shí)歪沃,此版本之后的記錄都自動抹去了。git reflog是提交的完整的命令歷史嫌松,回退到某個(gè)版本沪曙,仍然可以查到位于此版本號以后的版本號。

遠(yuǎn)程倉庫
關(guān)聯(lián)遠(yuǎn)程倉庫:git remote add origin git@server-name:path/repo-name.git萎羔。
關(guān)聯(lián)后液走,使用命令git push -u origin master第一次推送master分支的所有內(nèi)容
以后每次本地提交后,都可以使用git push origin master推送最新修改
使用git clone從遠(yuǎn)程倉庫克隆至本地呀

git創(chuàng)建分支

git branch 查看當(dāng)前分支
git branch dev 創(chuàng)建dev分支
git checkout dev 切換至dev分支
git checkout -b dev  創(chuàng)建并切換至dev分支
git merge xxx 用于將指定分支的工作成果合并到當(dāng)前分支
git branch -d branchname

git解決沖突
當(dāng)兩個(gè)分支同時(shí)對一個(gè)文件進(jìn)行修改時(shí)贾陷,merge時(shí)會發(fā)生沖突缘眶,解決辦法是git status查看沖突文件,然后查看文件內(nèi)容髓废,Git用<<<<<<<巷懈,=======,>>>>>>>標(biāo)記出不同分支的內(nèi)容慌洪。
例如:

<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1

然后手動修改沖突的內(nèi)容顶燕,解決沖突。

git log可以查看分支歷史冈爹。git log --graph命令可以看到分支合并圖

git 分支管理策略
一般情況下涌攻,合并分支是采用的fast-forward,即當(dāng)前分支與要合并的分支指針指向同一處频伤。

不使用fast-forward恳谎,命令為git merge --no-off dev,兩個(gè)分支的指針是指向不同位置的憋肖。

bug分支
存在的問題:當(dāng)前工作區(qū)在開發(fā)新功能因痛,但是線上出了問題急需解決,需要一個(gè)干凈的工作區(qū)瞬哼。
git提供了一個(gè)stash功能婚肆,git stash可以把當(dāng)前工作現(xiàn)場儲藏起來,拉過來一個(gè)干凈的工作現(xiàn)場坐慰,然后從master分支拉出來一個(gè)新的分支较性,修復(fù)完成后用僧,切換到master分支并完成合并。

恢復(fù)工作現(xiàn)場時(shí):
查看工作現(xiàn)場:git stash list
恢復(fù)工作現(xiàn)場:git stash apply
刪除工作現(xiàn)場:git stash drop
恢復(fù)&刪除工作現(xiàn)場:git stash pop
如果多次stash赞咙,恢復(fù)的時(shí)候先用git stash list查看责循,然后恢復(fù)指定的stash:git stash apply stash@{0}

開發(fā)新分支
開發(fā)一個(gè)新feature,最好新建一個(gè)分支
如果要丟棄一個(gè)沒有被合并過的分支攀操,可以通過git branch -D <name>強(qiáng)行刪除院仿。

多人合作
多人協(xié)作的工作模式通常是這樣:

  • 首先,可以試圖用git push origin branch-name推送自己的修改速和;
  • 如果推送失敗歹垫,則因?yàn)檫h(yuǎn)程分支比你的本地更新,需要先用git pull試圖合并颠放;
  • 如果合并有沖突排惨,則解決沖突,并在本地提交碰凶;
  • 沒有沖突或者解決掉沖突后暮芭,再用git push origin branch-name推送就能成功!
  • 查看遠(yuǎn)程庫信息欲低,使用git remote -v辕宏;

本地新建的分支如果不推送到遠(yuǎn)程,對其他人就是不可見的砾莱;

從本地推送分支瑞筐,使用git push origin branch-name,如果推送失敗恤磷,先用git pull抓取遠(yuǎn)程的新提交面哼;

在本地創(chuàng)建和遠(yuǎn)程分支對應(yīng)的分支,使用git checkout -b branch-name origin/branch-name扫步,本地和遠(yuǎn)程分支的名稱最好一致魔策;

從遠(yuǎn)程抓取分支,使用git pull河胎,如果有沖突闯袒,要先處理沖突。

如果git pull提示“no tracking information”游岳,則說明本地分支和遠(yuǎn)程分支的鏈接關(guān)系沒有創(chuàng)建政敢,用命令git branch --set-upstream branch-name origin/branch-name

標(biāo)簽
Git標(biāo)簽是版本庫的快照胚迫,其實(shí)是指向某個(gè)Commit的指針喷户,是以一種容易記憶的方式設(shè)定的,一般可指定為版本號vx.x

打標(biāo)簽git tag v1.0
正常情況下访锻,標(biāo)簽是打在此分支的最新提交的commit上的

git tag 查看標(biāo)簽
git show tagname 查看標(biāo)簽信息
git tag commit_id 為commit_id打標(biāo)簽
git tag -a v0.1 -m "version 0.1 released" 3628164 創(chuàng)建帶有說明的標(biāo)簽褪尝,-a指定標(biāo)簽名闹获,-m指定說明文字
git push origin v0.1 推送標(biāo)簽到遠(yuǎn)程
git push origin --tags 一次性推送尚未推送到遠(yuǎn)程的本地標(biāo)簽
git tag -d v0.1 在本地刪除標(biāo)簽
git push origin :refs/tags/v0.9 刪除遠(yuǎn)程的標(biāo)簽

參考文獻(xiàn)
Git教程

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市河哑,隨后出現(xiàn)的幾起案子避诽,更是在濱河造成了極大的恐慌,老刑警劉巖璃谨,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沙庐,死亡現(xiàn)場離奇詭異,居然都是意外死亡佳吞,警方通過查閱死者的電腦和手機(jī)拱雏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來底扳,“玉大人古涧,你說我怎么就攤上這事』ㄑ危” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵菇爪,是天一觀的道長算芯。 經(jīng)常有香客問我,道長凳宙,這世上最難降的妖魔是什么熙揍? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮氏涩,結(jié)果婚禮上届囚,老公的妹妹穿的比我還像新娘。我一直安慰自己是尖,他們只是感情好意系,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饺汹,像睡著了一般蛔添。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上兜辞,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天迎瞧,我揣著相機(jī)與錄音,去河邊找鬼逸吵。 笑死凶硅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扫皱。 我是一名探鬼主播足绅,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼捷绑,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了编检?” 一聲冷哼從身側(cè)響起胎食,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎允懂,沒想到半個(gè)月后厕怜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蕾总,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年粥航,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片生百。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡递雀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚀浆,到底是詐尸還是另有隱情缀程,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布市俊,位于F島的核電站杨凑,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏摆昧。R本人自食惡果不足惜撩满,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绅你。 院中可真熱鬧伺帘,春花似錦、人聲如沸忌锯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偶垮。三九已至礼殊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間针史,已是汗流浹背晶伦。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留啄枕,地道東北人婚陪。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像频祝,于是被迫代替她去往敵國和親泌参。 傳聞我的和親對象是個(gè)殘疾皇子脆淹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • git常用命令 GIT常用命令備忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章閱讀 8,478評論 1 26
  • 【視頻: http://www.iqiyi.com/v_19rrlho3ak.html】 我一向不說臟話铣缠,但是烘嘱,也...
    海倫_Helen閱讀 1,254評論 0 1
  • 林帥摘下耳機(jī),退出游戲蝗蛙,晃了晃被槍聲震了一下午的腦袋蝇庭,靠在椅子上,愣了會兒捡硅。 瞥了眼右下角的時(shí)間哮内,六點(diǎn)。 該吃飯了...
    河米閱讀 513評論 3 4
  • 今天依舊是我喜歡的雨天壮韭,雖然剛才有點(diǎn)悶悶的北发,但現(xiàn)在正吹來細(xì)細(xì)的涼風(fēng),讓人心里感覺好暢快喷屋。 不知...
    IDu21閱讀 302評論 0 0
  • 手起刀落鲫竞,快意江湖。 作為一個(gè)刀客逼蒙,最重要的是刀。 一把好刀寄疏。 當(dāng)十三妹直接了斷地說想我買這把刀的時(shí)候我是驚訝的是牢。...
    lichun閱讀 254評論 0 0