標籤:

如何用簡單的語言解釋 Git 的基礎命令?

Q: branch,index,tree,commit,clone,fork,master,origin,head,checkout,checkin等等這些命令是什麼意思?針對遠程和本地使用 push pull命令加上這些項讓 Git 更加難以理解。

在我第一次邂逅 GitHub 之前從沒有用過版本控制系統,因而 Git 終端成為了我的惡夢。網上「簡單的」教程試圖使用終端來教會大家使用 Git。並且這些形象化的教程,對這些命令的意義不作解釋直接使用。

Blob

你可能沒怎麼見過『blob』這個單詞,但它確是 git 中最基本的數據存儲結構。每次文件改變,Git 直接存儲文件內容,這在git術語里被稱作 Blob。

4254a17be3(哈希)

你看到的這些數字是內容的 SHA1 哈希,這些哈希值在git中作為每個對象的唯一標識,這些對象可能是commit,tree,或者 blob。哈希由 40 個字元構成,但僅僅需要前幾個字元(在 Github 中是 10 個)就足夠成為唯一的標識。

Tree(即文件夾或目錄)

在Git術語中樹就像文件夾或者目錄。通常在你的git庫的頂部有一個樹,用來記錄哪些文件(又名 blobs )和文件夾(又名 trees )的位置。

每個樹都有一個哈希和內容信息

了解更多 Git Object: tree | http://GitGuys.com

Commit (即快照)

一個更加詳細的 commit,tree 和 blob 結構。

可以把 Commits 想像成一個快照:它們記錄某個時間點相對應樹的樣子。每次提交會有一個哈希,提交者信息,時間以及注釋。

了解更多 Git Object: Git Commit - GitGuys

Check in = 做一次提交

提交的另一種叫法。

Commit History(提交歷史)

如果你做了一些改變並且提交,這次提交保存了一個指向上一次提交的指針。所以提交「流」是單向的。提交「流」可以被分割為分支。

Branch(即另存為)

一個分支是一系列的提交,這個分支可以分成更多的分支。默認分支名是 master,確切的說僅僅是一個可移動的指針。起初,會有一個 master 分支指向了你的最後一次提交。當你每一次提交,指針會自動的移動去指向最後一次提交。

和真正的分支一樣,它也可以被進一步的拆分。你可以在每一個分支上獨立的工作。比如,同一時刻使用 Windows XP 和 Windows 7 在不同的版本下相互獨立的進行工作。可以把一個基本的 Linux 擁有各種不同的風格想像成不同分支。

你可以使用『git show-branch』命令形象化地看到和下圖類似的提交和分支。

在這張圖裡綠色,藍色,黃色和紫色的線表示了使用軟體可視化後的不同分支。

更多詳細Creating And Playing With Branches | Git Branch | GitGuys

或者What a Branch Is

HEAD

Gi t中的 HEAD 是指向當前分支引用的指針,相應地也就是一個指向你的最後一次提交的指針。通常可以簡單的認為 HEAD 就是你的最後一次提交的快照。

Tag(書籤)

分支可能變得複雜,tag 在這裡可以拯救你。Tag 就像一個書籤。創建後可以指向任何分支的任意地方的一次特定的提交。不像分支,比如 master 分支指向了最後一次提交,而 tag 通常可以指向特定的一次提交。

一個 tag 代表了特定分支在某一個時刻的特定版本。

更多詳細Git Object: Tag | Git Tag | GitGuys.com

[資源: Git objects: the tag]

Index( 暫存區)

這裡的 Index 就是你打算的下一次提交。從根本上來說它就是一個裝卸碼頭你可以決定哪些改動被運走。由於工作目錄和 Git 已經保存的內容在本質上是分離的,這允許開發者創建他們想要的提交。既然在 Git 保存數據之前有了這一個暫存區,你獲得了更多的靈活性和控制權。

更多詳細What is the deal with the Git Index? What is the Git Index? - GitGuys

Checkout(檢出)

檢出一個提交使得整個工作目錄都匹配那個提交。這可以被用於查看你項目的一個舊的狀態而不必用任何方式替換你當前的狀態。檢出一個文件讓你看到那個指定文件的一個舊版本,使得你的工作目錄處於沒有被碰過的狀態。

大多數的圖片和文本摘取自[git ready " learn git one commit at a time] 和 [Pro Git - Pro Git Book]並且被我公開的編輯和投遞過。

一些容易理解的有用鏈接

Aha! Moments When Learning Git

Git documentation and Git tutorials on GitGuys | GitGuys.com

原文:How do you explain basics of Git in simple words?
推薦閱讀:

起底Git系列——精通Git的捷徑
為什麼你應該停止使用 Git rebase 命令
從0開始學習 GitHub 系列之「Git 進階」

TAG:Git |