Git物件型別和基本操作的理解
阿新 • • 發佈:2019-01-11
Git物件型別和基本操作的理解
Git物件型別
Git有四種基本的物件型別,包括:
- blobs: 每個blob代表一個版本檔案,blob只包含檔案的資料,而忽略檔案的其他元資料,如:名字、路徑、格式等。
- trees:每個tree代表了一個目錄的資訊,包含了此目錄下的blobs,子目錄(對應於子trees),檔名、路徑等元資料。因此,對於有子目錄的目錄,git相當於儲存了巢狀的trees。
- commits:每個commit記錄了提交一個更新的所有元資料,如:指向的tree、父commit、作者、提交者、提交日期、提交日誌等。每次提交都指向一個tree物件,記錄了當時提交的目錄資訊,一個commit可以有多個(至少一個)父commit。
- tags: tag用於給某個上述型別的物件指配一個便於開發者記憶的名字,通常用於某次commit。
Git工作流程
- 在工作目錄中修改某些檔案。
- 對修改後的檔案進行快照,然後儲存到暫存區域
- 提交更新,將儲存在暫存區域的檔案快照永久儲存到Git目錄中。
Git基本操作
- git clone
拷貝完整的Git倉庫,.git資料夾下包含所有Git需要的資料和資源。(伺服器上有的資料克隆之後本地也都有了。這樣的話,即使伺服器的磁碟發生故障,用任何一個克隆出來的客戶端都可以重建伺服器上的倉庫,回到當初克隆的狀態) - git init
在某個專案所在目錄中執行git init,可以實現對這個專案的Git管理。 - vim index.html
建立和編輯一個新檔案index.html,儲存退出後執行git status 會看到該檔案出現在未跟蹤的檔案列表中。 - git status
確定檔案當前所處狀態(剛克隆就執行,nothing to commit,這時工作目錄沒有任何檔案) - git add index.html
跟蹤一個檔案index.html,執行git status,會看到該檔案已經被跟蹤,並處於暫存狀態。 - git commit –m “提交說明”
在檔案都已經暫存起來的情況下,可以提交更新。
提交後的資訊,說明當前是在master分支提交的,還有本次提交的SHA-1校驗和,一級本次提交中,有多少檔案修訂過,多少行新增和刪改過。
Git是使用SHA-1演算法計算資料的校驗和,通過對檔案的內容或目錄的結構計算一個SHA-1雜湊值,它是一個40位的字串(十六進位制) - git log
會按提交時間列出所有的更新,最近的更新排在最上面。列出了每次更新的一個SHA-1校驗和、作者名字和電子郵件地址、提交時間、提交說明。 - git push <遠端主機名> <本地分支名>:<遠端主機分支名>
- git push orgin master
把本地的master分支推動到origin伺服器上(因為克隆操作會自動使用預設的master和origin名字) - vim index.html
- git diff
檢視沒有暫存的檔案更新了那些部分,不加引數直接輸入git diff
—代表原始檔
+++代表目標檔案
通常工作目錄中的檔案被當做目標檔案來看待。
-開頭的行是隻出現在原始檔中的行
+開頭的行是隻出現在目標檔案中的行
空格開頭的行,是原始檔與目標檔案都出現的行 - git diff –cached
檢視已經暫存起來的檔案和上次提交的快照之間的差異 - git reset HEAD
取消暫存 - git checkout –
開啟檔案進行修改,然後取消修改
vim index.html
git add . - git rm
從工作目錄中刪除檔案 - git rm –cached
僅從跟蹤清單中刪除,而保留在當前工作目錄 - git rm –f
強制刪除某檔案
遠端倉庫:要參與任何一個Git專案的協作,必須瞭解遠端倉庫的概念。遠端倉庫就是指託管在網路上的專案倉庫,這些倉庫是有讀寫許可權的,有些你只能讀,有些可以寫。和別人協作開發某個專案時,需要管理這些遠端倉庫,以便推送和拉取資料,分享各自的工作進展。 - git remote
檢視當前配置有哪些遠端倉庫,會列出每個遠端庫的簡短名字(克隆完某個專案之後,至少可以看到一個名為origin的遠端庫,git預設使用這個名字來標識你所克隆的原始倉庫) - git remote –v
顯示遠端倉庫對應的克隆地址 - git fetch
抓取遠端倉庫上有的,但本地倉庫沒有的資訊
Git分支
分支就是你可以在開發主線上分離開來,然後在不影響主線的同時繼續工作。在很多版本控制系統中,這是一個非常昂貴的過程,因為他們需要建立一個原始碼目錄的完整副本,對於大型專案來說這會發費很長時間。
Git的分支非常輕量級,它的新建操作可以在瞬間完成,並且在不同分支之間的轉換也特別快。Git鼓勵在工作流程中頻繁使用分支和合並。
Git分支的第一張ppt:在Git中提交時,會儲存一個提交(commit)物件,這個物件包含一個指向暫存內容快照的指標,包含本次提交的作者、提交者等資訊。工作目錄中有三個檔案,準備將他們暫存後提交,暫存操作會對每個檔案計算校驗和(SHA-1字串)。
這次的提交物件會包含上次提交物件的指標。
- git branch testing
新建一個testing分支
Git 需要知道你當前在哪個分支上工作,所有它儲存一個名為HEAD的指標,HEAD指向當前你正在工作中的本地分支。 - git checkout testing
將HEAD切換到testing分支
vim index.html修改之後提交,展示ppt(此時master和testing的位置)
轉到master分支,修改index.html, git add ,git commit - git merge testing
將testing中修改的內容合併到master分支
發生衝突是因為,在master和testing的分支裡都修改了同一個檔案的同一部分。Git就沒法自動合併,這時需要自己刪改。
======隔開的上半部分是HEAD指向的分支中的內容,下半部分是在testing分支中的內容。解決衝突的辦法是二選一或者親自整合到一起。 - git branch
後面不加引數,會給出當前所有分支的清單(*表示HEAD當前指向的分支) - git branch –d
刪除分支