1. 程式人生 > >Git物件型別和基本操作的理解

Git物件型別和基本操作的理解

Git物件型別和基本操作的理解

Git物件型別

Git有四種基本的物件型別,包括:

  1. blobs: 每個blob代表一個版本檔案,blob只包含檔案的資料,而忽略檔案的其他元資料,如:名字、路徑、格式等。
  2. trees:每個tree代表了一個目錄的資訊,包含了此目錄下的blobs,子目錄(對應於子trees),檔名、路徑等元資料。因此,對於有子目錄的目錄,git相當於儲存了巢狀的trees。
  3. commits:每個commit記錄了提交一個更新的所有元資料,如:指向的tree、父commit、作者、提交者、提交日期、提交日誌等。每次提交都指向一個tree物件,記錄了當時提交的目錄資訊,一個commit可以有多個(至少一個)父commit。
  4. 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
    刪除分支