Git簡(jiǎn)單命令理解

設(shè)想你現(xiàn)在位于?alpha/?目錄下,這里有一個(gè)文本文件?number.txt,里面的內(nèi)容只有一個(gè)詞:“first”。

現(xiàn)在執(zhí)行?git?init?將這個(gè)?alpha?文件夾初始化為?Git?倉(cāng)庫(kù)。

執(zhí)行?git?add?number.txt?會(huì)將?number.txt?添加到?Git?的索引(index)中。這個(gè)索引記錄了所有?Git?保持追蹤的文件,現(xiàn)在它有了一個(gè)映射記錄?number.txt?->?first,同時(shí)?add?命令還會(huì)把一個(gè)包含了?first?字符串的二進(jìn)制對(duì)象加入?Git?的對(duì)象數(shù)據(jù)庫(kù)里。

現(xiàn)在執(zhí)行?git?commit?-m?first。這條命令會(huì)做三件事情。首先在對(duì)象數(shù)據(jù)庫(kù)內(nèi)創(chuàng)建一個(gè)樹(shù)對(duì)象,用以記錄?alpha?目錄下的文件列表,這個(gè)對(duì)象有一個(gè)指針指向前面?git?add?命令創(chuàng)建的?first?二進(jìn)制對(duì)象;第二,這條命令還會(huì)創(chuàng)建一個(gè)?commit?對(duì)象用以代表剛剛提交的版本,它包含一個(gè)指針指向剛剛的樹(shù)對(duì)象;第三,master?分支也會(huì)指向這個(gè)新創(chuàng)建的?commit?對(duì)象。

現(xiàn)在執(zhí)行?git?clone?.?../beta。它會(huì)創(chuàng)建一個(gè)新目錄?beta?并將其初始化為?Git?倉(cāng)庫(kù),然后把?alpha?倉(cāng)庫(kù)的對(duì)象數(shù)據(jù)庫(kù)中所有對(duì)象拷貝給?beta?的對(duì)象數(shù)據(jù)庫(kù),將?beta?的?master?分支像?alpha?的?master?一樣指向相應(yīng)的對(duì)象。它還根據(jù)?first提交的內(nèi)容配置索引,并根據(jù)索引更新目錄下的文件——也就是?number.txt。

現(xiàn)在切換到?beta?目錄,修改?number.txt?的內(nèi)容為“second”,執(zhí)行?git?add?number.txt?和?git?commit?-m?second,新創(chuàng)建的提交對(duì)象?second(譯注:姑且稱之為?second)會(huì)有一個(gè)指向父提交(first)的指針,表示?second?繼承自?first,而?master?分支則指向?second?提交。

回到?alpha?目錄,執(zhí)行?git?remote?add?beta?../beta,將?beta?倉(cāng)庫(kù)設(shè)為遠(yuǎn)程倉(cāng)庫(kù)。然后執(zhí)行?git?pull?beta?master。

在這條命令背后,它其實(shí)會(huì)執(zhí)行?git?fetch?beta?master,從?beta?倉(cāng)庫(kù)中找到?second?提交的相關(guān)對(duì)象拷貝到?alpha?倉(cāng)庫(kù);把?alpha?中關(guān)于?beta?的?master?分支記錄指向這個(gè)?second?提交;更新?FETCH_HEAD?指向剛剛從?beta?倉(cāng)庫(kù)拉取的?master?分支,還是這個(gè)?second?提交。

此外,pull?命令還會(huì)執(zhí)行?git?merge?FETCH_HEAD。從?FETCH_HEAD?得知最近拉取的分支是?beta?倉(cāng)庫(kù)的?master?分支,據(jù)此拿到相應(yīng)的對(duì)象,也就是?second?提交對(duì)象。此時(shí)?alpha?的?master?分支指著?first?提交,正好是?second?的祖先提交,于是對(duì)于?merge?命令來(lái)說(shuō)只需要將?master?分支指向?second?提交即可。接下來(lái)?merge?命令還會(huì)更新索引以匹配?second?提交的內(nèi)容,并且相應(yīng)更新工作目錄中的文件。

現(xiàn)在執(zhí)行?git?branch?red,創(chuàng)建一個(gè)名為“red”、指向?second?提交的新分支。

然后執(zhí)行?git?checkout?red。在?checkout?之前,HEAD?指向?master?分支,執(zhí)行命令之后它就指向了?red?分支,使得?red?成為當(dāng)前分支。

接下來(lái)把?number.txt?的內(nèi)容修改為?“third”,執(zhí)行?git?add?numbers.txt?和?run?git?commit?-m?third。

之后再執(zhí)行?git?push?beta?red,這條命令會(huì)把?alpha?倉(cāng)庫(kù)內(nèi)跟?third?提交相關(guān)的對(duì)象拷貝至?beta?倉(cāng)庫(kù),并且將(alpha?倉(cāng)庫(kù)內(nèi)記錄的)beta?倉(cāng)庫(kù)?red?分支指向?third?提交。就醬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • 作者: Mary Rose Cook原文地址git操作的涉及的位置:“working-copy”<————>”in...
    windgo閱讀 196評(píng)論 0 2
  • 以下筆記主要參考gitgot,大致了解git使用和原理。 第一部分我們從個(gè)人的視角去研究如何用好Git,并且揭示G...
    carolwhite閱讀 2,415評(píng)論 0 1
  • 共十二首 兩人各半 請(qǐng)加以分辨 之一 不如徑上玉華臺(tái),烤肉季花九塊來(lái)。貴在燒雞佐黃酒,烤由烈火就干柴。 賜書(shū)三...
    斷腸紅閱讀 692評(píng)論 1 2
  • 歐洲復(fù)興需要什么? 歐盟作為世界最大的經(jīng)濟(jì)體,目前面臨著諸多的危機(jī),需要的究竟是“身份的認(rèn)同”還是“文化野心”?...
    Shirley_野孩子閱讀 616評(píng)論 0 0
  • 四.遇見(jiàn)故人 桃子和家明一起進(jìn)到茶餐廳,服務(wù)員熱情的說(shuō),宋先生,好久沒(méi)見(jiàn)你過(guò)來(lái)喝早茶了,這邊請(qǐng)。家明點(diǎn)頭示意后帶桃...
    親哥拜閱讀 437評(píng)論 0 0