日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

github 进阶说明

發布時間:2023/11/29 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 github 进阶说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • github 進階說明
    • 前言
    • 三個目錄樹
      • 重置 git reset
      • 增加路徑的reset
      • 檢出 checkout
      • 帶路徑的checkout
    • 倉庫
      • 數據對象
    • 其他
    • 資料

github 進階說明

前言

我們可以什么都不管,照搬命令來完成我們大部分git工作,但是如果想要進一步,就要深入理解git的實現原理,和底層機制。

三個目錄樹

  • HEAD 倉庫指針
  • index file 暫存區
  • Working Directory 工作目錄
  • 默認情況,頭指針會指向當前分支,當前分支指向當前目錄樹。所謂目錄樹簡而言之就是一個commit對象,保存了某個提交時刻的工作目錄內容的鏡像。而工作目錄就是當前文件內容。

    狀態一:初始情況是三者相同。
    狀態二:當你編輯了工作目錄下的內容,工作目錄和暫存區就不同。git status會提示你git add相關文件。
    狀態三:git add 之后,暫存區和倉庫又不相同了,git status 提示你git commit,當你git commit之后,回到狀態一,倉庫就增加了一個新的版本,當前分支指針移動到新版本之上。

    周而復始。

    重置 git reset

    但總有需要重置的時候:

    git reset移動當前分支指針(即間接改變HEAD)。

    手段一:git reset --soft HEAD~移動HEAD指針到HEAD~,這時倉庫和暫存區不同,暫存區和工作目錄相同,即狀態三。簡而言之,就是“撤銷”了上次的提交。

    手段二:git reset --mixed HEAD~ 移動HEAD指針到HEAD~,并重置暫存區。這時倉庫和暫存區相同,工作區和暫存區不同,即進入狀態二。--mixed是默認參數。

    手段三:git reset --hard HEAD~ 移動HEAD指針到HEAD~,并重置暫存區和工作區到當前HEAD版本。即狀態一。這是一條危險操作,因為你可能會丟失當前正在編輯而沒提交的所有內容。但這條命令也是真正完全的實現了跳躍版本,不會殘留任何一點當前版本的信息。

    增加路徑的reset

    reset可以增加路徑,這時的表現就是重置某個文件而已。并不會改動HEAD指針

    git reset -- file.txt 重置暫存區file.txt文件狀態。簡而言之,就是git add的反向操作。

    你還能指定暫存區重置到哪個版本git reset 234b file.txt。

    檢出 checkout

    checkout和reset命令很相似,也是操控三個目錄樹。差別是checkout 改變HEAD本身,reset是改變當前被HEAD指向的分支。務必理解這個二重指針的結構。

    比如HEAD 指向master,reset 會改變master,HEAD不變。而checkout 會直接改變HEAD,master不變。雖然表面現象上來說很多時候表現是差不多的,因為當前用戶可能只會觀察到三棵樹的變化,而沒有留意指針的變化。

    git checkout develop 從master分支切換到develop分支,并重置工作區和暫存區,進入狀態一。

    帶路徑的checkout

    類似帶路徑的reset,并不會改變HEAD,不同點它重置暫存區,同時也重置工作區。

    git checkout -- file.txt 用當前HEAD指向的目錄樹中的file.txt鏡像重置暫存區和工作區。

    倉庫

  • 純倉庫。git init --bare 創建一個純倉庫,只是用來存儲倉庫數據而不是用來工作的。比如用來做服務器遠端倉庫,本地倉庫的備份。
  • 空倉庫。git init 創建一個空倉庫
  • 倉庫內容:ls -F1 .git

    branches/ #分支 COMMIT_EDITMSG COMMIT_EDITMSG.save config #設置 description #GitWeb使用 FETCH_HEAD gitk.cache HEAD #頭指針 hooks/ #鉤子 index #暫存區 info/ #全局排除模式,類似.gitignore logs/ objects/ #數據 ORIG_HEAD refs/ #各種commit 指針

    數據對象

  • git hash-object 任何對象都可以用哈希值加入倉庫索引
  • git cat-file 用哈希值搜索倉庫內對象
  • git update-index --add --cachinfo 100644 更新暫存區對象
  • git write-tree 將暫存區寫入樹對象
  • git read-tree --prefix=dir 加入子樹,前綴dir
  • git commit-tree c03ca4 用樹對象生成提交對象
  • git log --stat 查看提交對象歷史信息
  • git fsck --full 查看沒有引用的對象
  • git gc 壓縮對象庫
  • git count-objects -v 查看空間暫用統計
  • git prune --expire now 立即清除所有不被引用的對象(因為試驗,生成了錯誤的對象,但是要清理非常非常麻煩,最后靠這條命令成功清理了)
  • git reflog expire --expire-unreachable=0 --all 清理操作記錄,這是對象有可能被引用的地方
  • 其他

  • git config core.autocrlf true 自動轉換換行格式。
  • 資料

    git社區參考書:http://gitbook.liuhui998.com/

    轉載于:https://www.cnblogs.com/Nobel/p/10550782.html

    總結

    以上是生活随笔為你收集整理的github 进阶说明的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。