github 進階說明

目錄

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

github 進階說明

前言

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

三個目錄樹

  1. HEAD 倉庫指針
  2. index file 暫存區
  3. 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鏡像重置暫存區和工作區。

倉庫

  1. 純倉庫。git init --bare 創建一個純倉庫,只是用來存儲倉庫數據而不是用來工作的。比如用來做服務器遠端倉庫,本地倉庫的備份。
  2. 空倉庫。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 指針

數據對象

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

其他

  1. git config core.autocrlf true 自動轉換換行格式。

資料

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

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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394761.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手把手教你 Spark 性能調優

0、背景 集群部分 spark 任務執行很慢,且經常出錯,參數改來改去怎么都無法優化其性能和解決頻繁隨機報錯的問題。 看了下任務的歷史運行情況,平均時間 3h 左右,而且極其不穩定,偶爾還會報錯: 1、優化思路 任…

pytorch線性回歸代碼_[PyTorch 學習筆記] 1.3 張量操作與線性回歸

本章代碼:https://github.com/zhangxiann/PyTorch_Practice/blob/master/lesson1/linear_regression.py張量的操作拼接torch.cat()torch.cat(tensors, dim0, outNone)功能:將張量按照 dim 維度進行拼接tensors: 張量序列dim: 要拼接的維度代碼示例&#…

軟考考前沖刺第十三章UML建模

1.如果一個對象發送了一個同步消息,那么它要等待對方對消息的應答,收到應答后才能繼續自己的操作。而發送異步消息的對象不需要等待對方對消息的應答便可以繼續自己的操作。 2.部署圖描述了一個運行時的硬件結點,以及在這些結點上運行的軟件組…

sqlalchemy_SQLAlchemy使ETL變得異常簡單

sqlalchemyOne of the key aspects of any data science workflow is the sourcing, cleaning, and storing of raw data in a form that can be used upstream. This process is commonly referred to as “Extract-Transform-Load,” or ETL for short.任何數據科學工作流程的…

c語言枚舉代替雙switch,C語言 使用數組代替switch分支語句降低圈復雜度

#include typedef int(*CALCULATE_FUN)(int, int); //定義函數指針typedef struct tagStruct{CALCULATE_FUN fun_name; //結構體成員,存放函數char calc_flag; //結構體成員,存放符號}CALC_STRUCT;/* 加減乘除函數聲明 */int fun_add(int x, int y);int …

基礎DP(初級版)

本文主要內容為基礎DP,內容來源為《算法導論》,總結不易,轉載請注明出處。 后續會更新出kuanbin關于基礎DP的題目...... 動態規劃: 動態規劃用于子問題重疊的情況,即不同的子問題具有相同的公共子子問題,在…

《UNIXLinux程序設計教程》一2.1 UNIX 輸入輸出基本概念

2.1 UNIX 輸入輸出基本概念 在任何一種操作系統中,程序開始讀寫一個文件的內容之前,必須首先在程序與文件之間建立連接或通信通道,這一過程稱為打開文件。打開一個文件的目的可能是要讀其中的數據,也可能是要往其中寫入數據&…

python時間計算_日期天數差計算(Python)

描述 從json文件中讀取兩個時間數據(數據格式例如:2019.01.01,數據類型是字符串),并計算結果,打印出兩個時間間隔了多少天。 輸入/輸出描述 輸入描述 json文件名稱datetime.json,格式如下&#…

c語言編常見算法,5個常見C語言算法

5個常見C語言算法十進制轉換為二進制的遞歸程序字符串逆置的遞歸程序整數數位反序&#xff0c;例如12345->54321四舍五入程序(考慮正負數)二分法查找的遞歸函數#include#include#include//十進制轉換為二進制的遞歸程序voidDecimalToBinary(int n){if(n<0){printf("…

利用Kinect將投影變得可直接用手操控

Finally 總算是到了這一天了&#xff01;假期里算法想不出來&#xff0c;或者被BUG折磨得死去活來的時候&#xff0c;總是YY著什么時候能心情愉快地坐在電腦前寫一篇項目總結&#xff0c;今天總算是抽出時間來總結一下這神奇的幾個月。 現在回過頭來看&#xff0c;上學期退出AC…

my-medium.cnf_您的手機如何打開medium.com-我將讓門衛和圖書管理員解釋。

my-medium.cnfby Andrea Zanin由Andrea Zanin 您的手機如何打開medium.com-我將讓門衛和圖書管理員解釋。 (How your phone opens medium.com — I’ll let a doorman and a librarian explain.) Hey did you notice what just happened? You clicked a link, and now here y…

springboot自動配置的原理_SpringBoot自動配置原理

SpringBoot的啟動入口就是一個非常簡單的run方法&#xff0c;這個run方法會加載一個應用所需要的所有資源和配置&#xff0c;最后啟動應用。通過查看run方法的源碼&#xff0c;我們發現&#xff0c;run方法首先啟動了一個監聽器&#xff0c;然后創建了一個應用上下文Configurab…

Django first lesson 環境搭建

pycharm ide集成開發環境 &#xff08;提高開發效率&#xff09; 解釋器/編譯器編輯器調試環境虛擬機連接 設置VirtualBox端口 操作1 操作2 點擊號添加&#xff0c;名稱為SSH&#xff0c;其中主機端口為物理機的端口&#xff0c;這里設置為1234&#xff0c;子系統端口為虛擬機的…

《Drupal實戰》——3.3 使用Views創建列表

3.3 使用Views創建列表 我們接著講解Views的設置&#xff0c;首先做一個簡單的實例。 3.3.1 添加內容類型“站內公告” 添加一個內容類型“站內公告”&#xff0c;屬性配置如表3-1所示。 為該內容類型設置Pathauto的模式news/[node:nid]&#xff0c;并且我們在這里將節點類型…

c語言函數編正切余切運算,淺談正切函數與余切函數的應用

九年義務教育三年制初級中學“數學”課本中&#xff0c;對正切函數和余切函數的定義是這樣下的&#xff1a;在&#xff32;&#xff54;&#xff21;&#xff22;&#xff23;中&#xff0c;∠&#xff23;&#xff1d;&#xff19;&#xff10;&#xff0c;&#xff41;&#…

wget命令下載文件

wget -r -N -l -k http://192.168.99.81:8000/solrhome/ 命令格式&#xff1a; wget [參數列表] [目標軟件、網頁的網址] -V,–version 顯示軟件版本號然后退出&#xff1b; -h,–help顯示軟件幫助信息&#xff1b; -e,–executeCOMMAND 執行一個 “.wgetrc”命令 -o,–output…

idea mybatis generator插件_SpringBoot+MyBatis+Druid整合demo

最近自己寫了一個SpringBootMybatis(generator)druid的demo1. mybatisgenerator逆向工程生成代碼1. pom文件pom文件添加如下內容&#xff0c;引入generator插件org.mybatis.generator mybatis-generator-maven-plugin 1.3.5 mysql …

vr格式視頻價格_如何以100美元的價格打造自己的VR耳機

vr格式視頻價格by Maxime Coutte馬克西姆庫特(Maxime Coutte) 如何以100美元的價格打造自己的VR耳機 (How you can build your own VR headset for $100) My name is Maxime Peroumal. I’m 16 and I built my own VR headset with my best friends, Jonas Ceccon and Gabriel…

python_裝飾器

# 裝飾器形成的過程 : 最簡單的裝飾器 有返回值得 有一個參數 萬能參數# 裝飾器的作用# 原則 &#xff1a;開放封閉原則# 語法糖&#xff1a;裝飾函數名# 裝飾器的固定模式 import time # time.time() # 獲取當前時間 # time.sleep() # 等待 # 裝飾帶參數的裝飾器 def timer…

歐洲的數據中心與美國的數據中心如何區分?

人會想到這意味著&#xff0c;在歐洲和北美的數據中心的設計基本上不會有大的差異。不過&#xff0c;一些小的差異是確實存在的。您可能想知道為什么你需要了解歐洲和北美的數據中心之間的差異&#xff0c;這對你的公司有幫助嗎?一個設計團隊往往能從另一個設計團隊那里學到東…