Git知識(shí)簡介

介紹

????Git是一個(gè)開源的分布式版本控制系統(tǒng)板祝,用以有效麻裳、高速的處理從很小到非常大的項(xiàng)目版本管理。git是個(gè)工具祷杈,在linux里面也就類似gcc這樣的工具一樣,是一個(gè)shell命令渗饮。

Git與GitHub區(qū)別

  • Git是版本控制工具
  • Github是一個(gè)平臺(tái)但汞,提供給用戶創(chuàng)建git倉儲(chǔ)空間,保存(托管)用戶的一些數(shù)據(jù)文檔或者代碼等互站。

Git與CVS私蕾、SVN的區(qū)別

  • Git是分布式版本控制系統(tǒng),代碼提交是在本地的(如此速度就快)胡桃,當(dāng)然生成補(bǔ)恫劝取(patch)然后push到遠(yuǎn)程服務(wù)器上是需要聯(lián)網(wǎng)的
  • CVS、SVN是集中式版本控制系統(tǒng)翠胰,代碼提交都是提交到遠(yuǎn)程服務(wù)器上
  • CVS容贝、SVN這樣的集中式版本控制系統(tǒng),它的完整代碼倉庫(代碼倉庫不僅僅只包含了代碼之景,還包含各個(gè)歷史版本的信息等)在中心服務(wù)器上斤富,一旦這個(gè)中心服務(wù)器掛了,也就是完整的代碼倉庫掛了</li>
  • Git沒有中心服務(wù)器的概念闺兢,每一個(gè)git客戶端(git節(jié)點(diǎn))都含有一個(gè)完整的代碼倉庫(前提是你之前從遠(yuǎn)程git倉庫fetch過代碼)

遠(yuǎn)程倉庫茂缚、工作區(qū)、版本庫和暫存區(qū)

遠(yuǎn)程倉庫

????就是在github或者在gitlab上的代碼屋谭〗拍遥可以用git pullgit push來進(jìn)行本地倉庫和遠(yuǎn)程倉庫的同步操作

工作區(qū)(Working Directory)

????從項(xiàng)目中取出某個(gè)版本的所有文件和目錄,用以開始后續(xù)工作的叫做工作目錄桐磁,也就是工作區(qū)

版本庫(Repository)

????工作區(qū)有一個(gè)隱藏目錄.git悔耘,這個(gè)不算工作區(qū),而是Git的版本庫我擂。
????Git的版本庫里存了很多東西衬以,其中最重要的就是稱為stage(或者叫index)的暫存區(qū)缓艳,還有Git為我們自動(dòng)創(chuàng)建的第一個(gè)分支master,以及指向master的一個(gè)指針叫HEAD看峻。

暫存區(qū)(Stage)

????暫存區(qū)就是版本庫中的一個(gè)區(qū)域阶淘,具體參見上面的結(jié)構(gòu)圖

工作區(qū)、版本庫互妓、暫存區(qū)之間的關(guān)系
  1. 使用git add把文件從工作區(qū)添加到版本庫中的暫存區(qū)溪窒,git add命令可以多次用,或者使用git add file1 file2 ...
  2. 使用git commit提交代碼冯勉,就是把暫存區(qū)的所有內(nèi)容提交到當(dāng)前分支
  3. 需要提交的文件修改通通放到暫存區(qū)(可能有多次的git add)澈蚌,然后,一次性提交暫存區(qū)的所有修改到當(dāng)前分支(git commit)

版本回退

????前提條件:已經(jīng)執(zhí)行g(shù)it commit命令了灼狰,但是沒有push到遠(yuǎn)程倉庫宛瞄,用以下命令可以回退
????其實(shí)這個(gè)回退就是將本地的HEAD指針移動(dòng)到某個(gè)版本上而已,所以這個(gè)操作是非辰慌撸快的份汗。

回退到上一個(gè)版本
  • 在Git中,用HEAD表示當(dāng)前版本承绸,也就是最新的提交3628164...882e1e0裸影,上一個(gè)版本就是HEAD^,上上一個(gè)版本就是HEAD^^军熏,當(dāng)然往上100個(gè)版本寫100個(gè)^比較容易數(shù)不過來轩猩,所以寫成HEAD~100
  • 版本號(hào)沒必要寫全,前幾位就可以了荡澎,Git會(huì)自動(dòng)去找均践。當(dāng)然也不能只寫前一兩位,因?yàn)镚it可能會(huì)找到多個(gè)版本號(hào)摩幔,就無法確定是哪一個(gè)了
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
回退到未來的某個(gè)版本
  • 使用git log命令查看提交記錄彤委,找到需要回退版本的commit id
  • 如果在回退以后又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作記錄(包括commit和reset的操作)或衡,包括已經(jīng)被刪除的commit記錄
$ git reset --hard 3628164
HEAD is now at 3628164 append GPL

git log則不能查看已經(jīng)刪除了的commit記錄

總結(jié)
  • HEAD指向的版本就是當(dāng)前版本焦影,因此,Git允許我們?cè)诎姹镜臍v史之間穿梭封断,使用命令git reset --hard commit_id
  • 穿梭前斯辰,用git log可以查看提交歷史,以便確定要回退到哪個(gè)版本
  • 要重返未來坡疼,用git reflog查看命令歷史彬呻,以便確定要回到未來的哪個(gè)版本

git reset –-soft:回退到某個(gè)版本,只回退了commit的信息,不會(huì)恢復(fù)到index file一級(jí)闸氮。如果還要提交剪况,直接commit即可
git reset -–hard:徹底回退到某個(gè)版本,本地的源碼也會(huì)變?yōu)樯弦粋€(gè)版本的內(nèi)容蒲跨,撤銷的commit中所包含的更改被沖掉

撤銷修改

含義

????命令git checkout -- file意思就是译断,把file文件在工作區(qū)的修改全部撤銷,這里有兩種情況:

  • 一種是file自修改后還沒有被放到暫存區(qū)或悲,現(xiàn)在镐作,撤銷修改就回到和版本庫一模一樣的狀態(tài);
  • 一種是file已經(jīng)添加到暫存區(qū)后隆箩,又作了修改,現(xiàn)在羔杨,撤銷修改就回到添加到暫存區(qū)后的狀態(tài)捌臊。
    總之,就是讓這個(gè)文件回到最近一次git commit或git add時(shí)的狀態(tài)兜材。
場景
  • 場景1:當(dāng)你改亂了工作區(qū)某個(gè)文件的內(nèi)容理澎,想直接丟棄工作區(qū)的修改時(shí),用命令git checkout -- file
  • 場景2:當(dāng)你不但改亂了工作區(qū)某個(gè)文件的內(nèi)容曙寡,還添加到了暫存區(qū)時(shí)糠爬,想丟棄修改,分兩步举庶,第一步用命令git reset HEAD file执隧,就回到了場景1,第二步按場景1操作</li>
  • 場景3:已經(jīng)提交了不合適的修改到版本庫時(shí)户侥,想要撤銷本次提交镀琉,版本回退一節(jié),不過前提是沒有推送到遠(yuǎn)程庫

git stash

????場景:當(dāng)你接到一個(gè)修復(fù)一個(gè)代號(hào)101的bug的任務(wù)時(shí)蕊唐,你想創(chuàng)建一個(gè)分支issue-101來修復(fù)它屋摔,但是,當(dāng)前正在dev上進(jìn)行的工作還沒有提交替梨,Git還提供了一個(gè)stash功能钓试,可以把當(dāng)前工作現(xiàn)場“儲(chǔ)藏”起來,等以后恢復(fù)現(xiàn)場后繼續(xù)工作

git stash list

????查看暫存區(qū)的所有暫存修改記錄

$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
git stash apply stash@{X}

????取出相應(yīng)的暫存

git stash drop stash@{X}

????將記錄列表中取出的對(duì)應(yīng)暫存記錄刪除

git stash pop(推薦)

????取出最近一次暫存并刪除記錄列表中對(duì)應(yīng)記錄

分支管理

命令 含義
git branch 查看分支
git branch <name> 創(chuàng)建分支
git checkout <name> 切換分支
git checkout -b <name> 創(chuàng)建+切換分支
git merge <name> 合并某分支到當(dāng)前分支
git branch -d <name> 刪除分支
Bug分支

????在Git中副瀑,由于分支是如此的強(qiáng)大弓熏,所以,每個(gè)bug都可以通過一個(gè)新的臨時(shí)分支來修復(fù)俗扇,修復(fù)后硝烂,合并分支,然后將臨時(shí)分支刪除。

Feature分支

????添加一個(gè)新功能時(shí)滞谢,你肯定不希望因?yàn)橐恍?shí)驗(yàn)性質(zhì)的代碼串稀,把主分支搞亂了,所以狮杨,每添加一個(gè)新功能母截,最好新建一個(gè)feature分支,在上面開發(fā)橄教,完成后清寇,合并,最后护蝶,刪除該feature分支华烟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市持灰,隨后出現(xiàn)的幾起案子盔夜,更是在濱河造成了極大的恐慌,老刑警劉巖堤魁,帶你破解...
    沈念sama閱讀 218,546評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喂链,死亡現(xiàn)場離奇詭異,居然都是意外死亡妥泉,警方通過查閱死者的電腦和手機(jī)椭微,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來盲链,“玉大人蝇率,你說我怎么就攤上這事」粽矗” “怎么了瓢剿?”我有些...
    開封第一講書人閱讀 164,911評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長悠轩。 經(jīng)常有香客問我间狂,道長,這世上最難降的妖魔是什么火架? 我笑而不...
    開封第一講書人閱讀 58,737評(píng)論 1 294
  • 正文 為了忘掉前任鉴象,我火速辦了婚禮,結(jié)果婚禮上何鸡,老公的妹妹穿的比我還像新娘纺弊。我一直安慰自己,他們只是感情好骡男,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,753評(píng)論 6 392
  • 文/花漫 我一把揭開白布淆游。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪犹菱。 梳的紋絲不亂的頭發(fā)上拾稳,一...
    開封第一講書人閱讀 51,598評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音腊脱,去河邊找鬼访得。 笑死,一個(gè)胖子當(dāng)著我的面吹牛陕凹,可吹牛的內(nèi)容都是我干的悍抑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,338評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼杜耙,長吁一口氣:“原來是場噩夢啊……” “哼搜骡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起佑女,我...
    開封第一講書人閱讀 39,249評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤浆兰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后珊豹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡榕订,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,888評(píng)論 3 336
  • 正文 我和宋清朗相戀三年店茶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劫恒。...
    茶點(diǎn)故事閱讀 40,013評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡贩幻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出两嘴,到底是詐尸還是另有隱情丛楚,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評(píng)論 5 346
  • 正文 年R本政府宣布憔辫,位于F島的核電站趣些,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贰您。R本人自食惡果不足惜坏平,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,348評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锦亦。 院中可真熱鬧舶替,春花似錦、人聲如沸杠园。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陈醒,卻和暖如春惕橙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背孵延。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評(píng)論 1 270
  • 我被黑心中介騙來泰國打工吕漂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尘应。 一個(gè)月前我還...
    沈念sama閱讀 48,203評(píng)論 3 370
  • 正文 我出身青樓惶凝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親犬钢。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苍鲜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,960評(píng)論 2 355

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

  • Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來玷犹。這樣一來混滔,任何一處協(xié)同...
    __silhouette閱讀 15,887評(píng)論 5 147
  • Git 命令行學(xué)習(xí)筆記 Git 基礎(chǔ) 基本原理 客戶端并不是只提取最新版本的文件快照,而是把代碼倉庫完整的鏡像下來...
    sunnyghx閱讀 3,921評(píng)論 0 11
  • Git常用語法 [TOC] Git簡介 描述 ? Git(讀音為/g?t/歹颓。)是一個(gè)開源的分布式版本控制系統(tǒng)坯屿,...
    君惜丶閱讀 3,518評(píng)論 0 13
  • Git是目前最流行的版本管理系統(tǒng),也是最先進(jìn)的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,707評(píng)論 1 17
  • 111111
    生氣呢閱讀 186評(píng)論 0 0