欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

圖解GitHub

系統(tǒng) 1882 0

轉自:http://marklodato.github.io/visual-git-guide/index-zh-cn.html

個人覺得這一篇比一些入門教程更值得看,圖解很詳細到位,很容易理解其工作原理,明白了這個過程,對以后沖突的產生以及其他難題相信可以依靠自己快速分析出來。

有不懂的地方歡迎評論討論

圖解Git

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

正文

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

基本用法

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

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

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

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

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

約定

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

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

命令詳解

Diff

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

Commit

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

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

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

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

Checkout

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

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

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

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

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

HEAD 處于分離狀態(tài)(不依附于任一分支)時,提交操作可以正常進行,但是不會更新任何已命名的分支。(你可以認為這是在更新一個匿名分支。)

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

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

Reset

reset命令把當前分支指向另一個位置,并且有選擇的變動工作目錄和索引。也用來在從歷史倉庫中復制文件到索引,而不動工作目錄。

如果不給選項,那么當前分支指向到那個提交。如果用 --hard 選項,那么工作目錄也更新,如果用 --soft 選項,那么都不變。

如果沒有給出提交點的版本號,那么默認用 HEAD 。這樣,分支指向不變,但是索引會回滾到最后一次提交,如果用 --hard 選項,工作目錄也同樣。

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

Merge

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

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

Cherry Pick

cherry-pick命令"復制"一個提交節(jié)點并在當前分支做一次完全一樣的新提交。

Rebase

衍合是合并命令的另一種選擇。合并把兩個父分支合并進行一次提交,提交歷史不是線性的。衍合在當前分支上重演另一個分支的歷史,提交歷史是線性的。 本質上,這是線性化的自動的cherry-pick

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

要限制回滾范圍,使用 --onto 選項。下面的命令在 master 分支上重演當前分支從 169a6 以來的最近幾個提交,即 2c33a

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

技術說明

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

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

圖解GitHub


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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久精品国产欧美成人 | 婷婷狠狠干 | 99在线精品视频 | 欧美视频在线免费看 | 色婷婷社区 | 香港全黄一级毛片在线播放 | 亚洲精品国产电影 | 亚洲精品免费在线观看 | 精品国产三级在线观看 | 男生日女生免费视频 | 超级在线牛碰碰视频 | 国产精品色综合久久 | 亚洲最新永久观看在线 | 国产在线观看av | 中文字幕成人av | 日本一区二区视频 | 波多野结衣中文在线观看 | 午夜精品一区二区三区免费视频 | 亚洲最新在线 | 免费观看一级特黄欧美大片 | 激情久久一区二区 | 日本欧美中文字幕人在线 | 啊啊啊网站 | 国产九色 | 欧美一区二区三区精品国产 | 热久久精品在线 | 波多野结衣一区二区在线 | 激情婷婷综合 | 日本欧美一区二区三区不卡视频 | 精品久久久久久久人人人人传媒 | 免费观看一级欧美在线视频 | 精品久久久一二三区 | 欧洲成人精品 | 国产视频三区 | 久久99深爱久久99精品 | 天天夜夜操操 | 欧美v在线 | 国产伦精品一区二区 | 成人午夜 | 2019中文字幕视频 | 日韩专区在线观看 |