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

圖解GitHub

系統(tǒng) 2009 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)行一次提交,提交歷史不是線(xiàn)性的。衍合在當(dāng)前分支上重演另一個(gè)分支的歷史,提交歷史是線(xiàn)性的。 本質(zhì)上,這是線(xiàn)性化的自動(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)論
主站蜘蛛池模板: 欧美一级性视频 | 中文字幕精品视频在线 | 免费精品视频 | 99国产大尺度福利视频 | 日本不卡免免费观看 | 久久国产资源 | 亚洲欧美一区二区三区四区 | 久久99精品久久久久久综合 | 久久久久久青草大香综合精品 | 日韩欧美成末人一区二区三区 | 九九久久久久久久爱 | 欧美乱妇高清视频免欢看关 | 国产精品福利视频手机免费观看 | 亚洲天堂国产 | 香蕉视频国产 | 亚洲阿v天堂在线观看2017 | 欧美影院一区 | 日本久久精品免视看国产成人 | 一区二区三区在线播放视频 | 成人欧美一区二区三区黑人妖 | 97国产精品国产品国语字幕 | 伊人丁香狠狠色综合久久 | 久久99热精品免费观看无卡顿 | 国产成人综合网亚洲欧美在线 | 免费一区二区三区久久 | 91综合精品网站久久 | 青青热久免费精品视频在线观看 | 国产91在线 | 亚洲 | 你懂得在线网站 | www欧美com| 老司机午夜在线视频 | 成人午夜视频在线观看 | 久久亚洲精品中文字幕第一区 | 高清欧美一区二区免费影视 | 天海翼一区 在线播放 | 热re66久久精品国产99re | 亚洲精品美女久久777777 | 天天插天天插天天插 | 亚洲欧美精品一中文字幕 | 国产欧美另类久久精品91 | 日韩在线2020专区 |