亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

圖解GitHub

系統(tǒng) 1814 0

轉(zhuǎn)自:http://marklodato.github.io/visual-git-guide/index-zh-cn.html

個(gè)人覺(jué)得這一篇比一些入門(mén)教程更值得看,圖解很詳細(xì)到位,很容易理解其工作原理,明白了這個(gè)過(guò)程,對(duì)以后沖突的產(chǎn)生以及其他難題相信可以依靠自己快速分析出來(lái)。

有不懂的地方歡迎評(píng)論討論

圖解Git

此頁(yè)圖解git中的最常用命令。如果你稍微理解git的工作原理,這篇文章能夠讓你理解的更透徹。 如果你想知道這個(gè)站點(diǎn)怎樣產(chǎn)生,請(qǐng)前往GitHub repository。

正文

  1. 基本用法
  2. 約定
  3. 命令詳解
    1. Diff
    2. Commit
    3. Checkout
    4. Detached HEAD(匿名分支提交)
    5. Reset
    6. Merge
    7. Cherry Pick
    8. Rebase
  4. 技術(shù)說(shuō)明

基本用法

上面的四條命令在工作目錄、暫存目錄(也叫做索引)和倉(cāng)庫(kù)之間復(fù)制文件。

  • git add? files ?把當(dāng)前文件放入暫存區(qū)域。
  • git commit ?給暫存區(qū)域生成快照并提交。
  • git reset --? files ?用來(lái)撤銷(xiāo)最后一次 git add? files ,你也可以用 git reset ?撤銷(xiāo)所有暫存區(qū)域文件。
  • git checkout --? files ?把文件從暫存區(qū)域復(fù)制到工作目錄,用來(lái)丟棄本地修改。

你可以用? git reset -p ,? git checkout -p , or? git add -p 進(jìn)入交互模式。

也可以跳過(guò)暫存區(qū)域直接從倉(cāng)庫(kù)取出文件或者直接提交代碼。

  • git commit -a? 相當(dāng)于運(yùn)行? git add ?把所有當(dāng)前目錄下的文件加入暫存區(qū)域再運(yùn)行。 git commit .
  • git commit? files ?進(jìn)行一次包含最后一次提交加上工作目錄中文件快照的提交。并且文件被添加到暫存區(qū)域。
  • git checkout HEAD --? files ?回滾到復(fù)制最后一次提交。

約定

后文中以下面的形式使用圖片。

綠色的5位字符表示提交的ID,分別指向父節(jié)點(diǎn)。分支用橘色顯示,分別指向特定的提交。當(dāng)前分支由附在其上的 HEAD 標(biāo)識(shí)。 這張圖片里顯示最后5次提交, ed489 是最新提交。? master 分支指向此次提交,另一個(gè) maint 分支指向祖父提交節(jié)點(diǎn)。

命令詳解

Diff

有許多種方法查看兩次提交之間的變動(dòng)。下面是一些示例。

Commit

提交時(shí),git用暫存區(qū)域的文件創(chuàng)建一個(gè)新的提交,并把此時(shí)的節(jié)點(diǎn)設(shè)為父節(jié)點(diǎn)。然后把當(dāng)前分支指向新的提交節(jié)點(diǎn)。下圖中,當(dāng)前分支是 master 。 在運(yùn)行命令之前, master 指向 ed489 ,提交后, master 指向新的節(jié)點(diǎn) f0cec 并以 ed489 作為父節(jié)點(diǎn)。

即便當(dāng)前分支是某次提交的祖父節(jié)點(diǎn),git會(huì)同樣操作。下圖中,在 master 分支的祖父節(jié)點(diǎn) maint 分支進(jìn)行一次提交,生成了 1800b 。 這樣, maint 分支就不再是 master 分支的祖父節(jié)點(diǎn)。此時(shí),合并?(或者?衍合) 是必須的。

如果想更改一次提交,使用? git commit --amend 。git會(huì)使用與當(dāng)前提交相同的父節(jié)點(diǎn)進(jìn)行一次新提交,舊的提交會(huì)被取消。

另一個(gè)例子是分離HEAD提交,后文講。

Checkout

checkout命令用于從歷史提交(或者暫存區(qū)域)中拷貝文件到工作目錄,也可用于切換分支。

當(dāng)給定某個(gè)文件名(或者打開(kāi)-p選項(xiàng),或者文件名和-p選項(xiàng)同時(shí)打開(kāi))時(shí),git會(huì)從指定的提交中拷貝文件到暫存區(qū)域和工作目錄。比如, git checkout HEAD~ foo.c 會(huì)將提交節(jié)點(diǎn) HEAD~ (即當(dāng)前提交節(jié)點(diǎn)的父節(jié)點(diǎn))中的 foo.c 復(fù)制到工作目錄并且加到暫存區(qū)域中。(如果命令中沒(méi)有指定提交節(jié)點(diǎn),則會(huì)從暫存區(qū)域中拷貝內(nèi)容。)注意當(dāng)前分支不會(huì)發(fā)生變化。

當(dāng)不指定文件名,而是給出一個(gè)(本地)分支時(shí),那么 HEAD 標(biāo)識(shí)會(huì)移動(dòng)到那個(gè)分支(也就是說(shuō),我們“切換”到那個(gè)分支了),然后暫存區(qū)域和工作目錄中的內(nèi)容會(huì)和 HEAD 對(duì)應(yīng)的提交節(jié)點(diǎn)一致。新提交節(jié)點(diǎn)(下圖中的a47c3)中的所有文件都會(huì)被復(fù)制(到暫存區(qū)域和工作目錄中);只存在于老的提交節(jié)點(diǎn)(ed489)中的文件會(huì)被刪除;不屬于上述兩者的文件會(huì)被忽略,不受影響。

如果既沒(méi)有指定文件名,也沒(méi)有指定分支名,而是一個(gè)標(biāo)簽、遠(yuǎn)程分支、SHA-1值或者是像 master~3 類(lèi)似的東西,就得到一個(gè)匿名分支,稱(chēng)作 detached HEAD (被分離的 HEAD 標(biāo)識(shí))。這樣可以很方便地在歷史版本之間互相切換。比如說(shuō)你想要編譯1.6.6.1版本的git,你可以運(yùn)行 git checkout v1.6.6.1 (這是一個(gè)標(biāo)簽,而非分支名),編譯,安裝,然后切換回另一個(gè)分支,比如說(shuō) git checkout master 。然而,當(dāng)提交操作涉及到“分離的HEAD”時(shí),其行為會(huì)略有不同,詳情見(jiàn)在下面。

HEAD標(biāo)識(shí)處于分離狀態(tài)時(shí)的提交操作

當(dāng) HEAD 處于分離狀態(tài)(不依附于任一分支)時(shí),提交操作可以正常進(jìn)行,但是不會(huì)更新任何已命名的分支。(你可以認(rèn)為這是在更新一個(gè)匿名分支。)

一旦此后你切換到別的分支,比如說(shuō) master ,那么這個(gè)提交節(jié)點(diǎn)(可能)再也不會(huì)被引用到,然后就會(huì)被丟棄掉了。注意這個(gè)命令之后就不會(huì)有東西引用 2eecb 。

但是,如果你想保存這個(gè)狀態(tài),可以用命令 git checkout -b? name 來(lái)創(chuàng)建一個(gè)新的分支。

Reset

reset命令把當(dāng)前分支指向另一個(gè)位置,并且有選擇的變動(dòng)工作目錄和索引。也用來(lái)在從歷史倉(cāng)庫(kù)中復(fù)制文件到索引,而不動(dòng)工作目錄。

如果不給選項(xiàng),那么當(dāng)前分支指向到那個(gè)提交。如果用 --hard 選項(xiàng),那么工作目錄也更新,如果用 --soft 選項(xiàng),那么都不變。

如果沒(méi)有給出提交點(diǎn)的版本號(hào),那么默認(rèn)用 HEAD 。這樣,分支指向不變,但是索引會(huì)回滾到最后一次提交,如果用 --hard 選項(xiàng),工作目錄也同樣。

如果給了文件名(或者? -p 選項(xiàng)), 那么工作效果和帶文件名的checkout差不多,除了索引被更新。

Merge

merge 命令把不同分支合并起來(lái)。合并前,索引必須和當(dāng)前提交相同。如果另一個(gè)分支是當(dāng)前提交的祖父節(jié)點(diǎn),那么合并命令將什么也不做。 另一種情況是如果當(dāng)前提交是另一個(gè)分支的祖父節(jié)點(diǎn),就導(dǎo)致 fast-forward 合并。指向只是簡(jiǎn)單的移動(dòng),并生成一個(gè)新的提交。

否則就是一次真正的合并。默認(rèn)把當(dāng)前提交( ed489 ?如下所示)和另一個(gè)提交( 33104 )以及他們的共同祖父節(jié)點(diǎn)( b325c )進(jìn)行一次三方合并。結(jié)果是先保存當(dāng)前目錄和索引,然后和父節(jié)點(diǎn) 33104 一起做一次新提交。

Cherry Pick

cherry-pick命令"復(fù)制"一個(gè)提交節(jié)點(diǎn)并在當(dāng)前分支做一次完全一樣的新提交。

Rebase

衍合是合并命令的另一種選擇。合并把兩個(gè)父分支合并進(jìn)行一次提交,提交歷史不是線性的。衍合在當(dāng)前分支上重演另一個(gè)分支的歷史,提交歷史是線性的。 本質(zhì)上,這是線性化的自動(dòng)的cherry-pick

上面的命令都在 topic 分支中進(jìn)行,而不是 master 分支,在 master 分支上重演,并且把分支指向新的節(jié)點(diǎn)。注意舊提交沒(méi)有被引用,將被回收。

要限制回滾范圍,使用 --onto 選項(xiàng)。下面的命令在 master 分支上重演當(dāng)前分支從 169a6 以來(lái)的最近幾個(gè)提交,即 2c33a 。

同樣有 git rebase --interactive 讓你更方便的完成一些復(fù)雜操作,比如丟棄、重排、修改、合并提交。沒(méi)有圖片體現(xiàn)這些,細(xì)節(jié)看這里:git-rebase(1)

技術(shù)說(shuō)明

文件內(nèi)容并沒(méi)有真正存儲(chǔ)在索引( .git/index )或者提交對(duì)象中,而是以blob的形式分別存儲(chǔ)在數(shù)據(jù)庫(kù)中( .git/objects ),并用SHA-1值來(lái)校驗(yàn)。 索引文件用識(shí)別碼列出相關(guān)的blob文件以及別的數(shù)據(jù)。對(duì)于提交來(lái)說(shuō),以樹(shù)( tree )的形式存儲(chǔ),同樣用對(duì)于的哈希值識(shí)別。樹(shù)對(duì)應(yīng)著工作目錄中的文件夾,樹(shù)中包含的 樹(shù)或者blob對(duì)象對(duì)應(yīng)著相應(yīng)的子目錄和文件。每次提交都存儲(chǔ)下它的上一級(jí)樹(shù)的識(shí)別碼。

如果用detached HEAD提交,那么最后一次提交會(huì)被the reflog for HEAD引用。但是過(guò)一段時(shí)間就失效,最終被回收,與 git commit --amend 或者 git rebase 很像。

圖解GitHub


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!??!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 免费大片黄在线观看yw | 久久精品免费视频6 | 日本aⅴ网站 | 中文字幕日本一区波多野不卡 | 久久 精品 一区二区 | 青草青青在线视频观看 | 国产精品久久久久久久久久久搜索 | 成人www视频 | 欧美午夜视频 | 亚洲综合第一欧美日韩中文 | 桃花阁成人网在线观看 | 91精品国产91久久久久福利 | 香蕉免费在线视频 | 男人的午夜 | 最新国产午夜精品视频不卡 | 99久久精品国产免费 | 亚洲高清视频网站 | 特级毛片免费视频 | 久久视频在线 | xxx大片免费视频 | 性欧美xo视频在线观看 | 国产99精品在线观看 | 欧美日韩在线视频播放 | 亚洲日本香蕉视频 | 色播五月激情五月 | 国产九九免费视频网站 | 日韩一区国产二区欧美三 | 亚洲综合91 | 孕妇xxxxxx孕交xxx | se94se欧美综合色 | 久久国产免费一区 | 久久精品视频日本 | 国产美女亚洲精品久久久久久 | 亚洲欧美色综合精品 | 国产目拍亚洲精品区一区 | 一级爱爱片一级毛片-一毛 一级白嫩美女毛片免费 | 四虎影视久久 | 离线枕边人国语在线影视 | 欧美一区二区三区不卡片 | 久久国产精品-国产精品 | 午夜黄色影院 |