深入了解Git

git基本命令還可以參考Pro Git;
以下是mac系統(tǒng)終端操作,常用命令可以參考http://www.itdecent.cn/p/3291de46f3ff

** 附上方便操作的終端快捷鍵**

Command + K 清屏
Command + T 新建標簽
Command +W 關(guān)閉當(dāng)前標簽頁
Command + S 保存終端輸出
Command + D 垂直分隔當(dāng)前標簽頁
Command + Shift + D 水平分隔當(dāng)前標簽頁
Command + shift + {或}向左/向右切換標簽

git基本操作流程

  1. 創(chuàng)建測試文件夾,名字我命名為JHGit;
mkdir JHGit
目錄下的文件

2.切換到JHGit文件夾下

cd JHGit

3.初始化git

git init
初始化后的文件夾目錄

4.先查看下.git文件內(nèi)容

vi .git   //或者  
cd .git
vim編輯器下的內(nèi)容

也可以使用tree命令!
溫馨提示:mac下默認是沒有 tree命令!??!
下面幾個方法可以試試

1.可以使用find命令模擬出tree命令的效果

find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'

2.手動alias一下,在你的.bash_profile或者.zshrc中添加:(前提你已經(jīng)安裝了oh-my-zash)

alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"

3.可以使用 homebrew 安裝 tree 命令行:

brew install tree
Paste_Image.png

5.HEAD

當(dāng)前所在分支

6.查看下config里面的東西:設(shè)置了一些默認的參數(shù)之類的

cat .git/config
config

7.description是描述文件

對當(dāng)前庫的描述

8.根據(jù)HEAD打印的路徑提示找到refs/heads/下

HEAD路徑

9.hooks(腳本文件夾),具體了解可以參考GIt Hooks

Paste_Image.png

10.info里面的exclude objects里面的info和pack目前都是空文件

11.和遠程倉庫建議聯(lián)系

 git remote add origin https://github.com/Shenjinghao/JHGit

** 注意:連接簡歷后,可以正常git pull代碼,但是如果不做修改,是無法git push提交代碼,原因是此時的master的分支不指向任何commit。**

其實這里也可以通過git clone命令跳過和遠程倉庫連接這一步!

git clone https://github.com/Shenjinghao/JHGit.git

連接后config內(nèi)容變?yōu)橄聢D


連接后的config內(nèi)容

12.使用touch命令創(chuàng)建個test1文件,工作區(qū)會提示,通過命令

git add test1

將test1添加到暫存區(qū),也可以跳過add階段,既跳過使用暫存區(qū)域,直接把已經(jīng)跟蹤的文件暫存起來一起提交。

git commit -am“xx”  ||   git commit -a -m“xx”
創(chuàng)建commit
添加暫存區(qū)
提交commit

然后此時的.git變化如下

變化后的.git
變化的.git

使用log命令可以看到最近的log日志

git log
git log
.git的新增內(nèi)容
對應(yīng)關(guān)系

從上面幾幅圖可以看出,提交的commit消息,最新的commit id和origin的commit id都會被保存

下面引入git的主要工作方式

三個區(qū)域
  • 工作區(qū)
  • 暫存區(qū)
  • git倉庫
Three Sections
四種狀態(tài)

已跟蹤(tracked)已提交(commited) 已修改(modified) 已緩存(staged)

  • 在工作目錄中修改某些文件

  • 對修改的文件做快照,并保存到暫存區(qū)

  • 提交更新,將保存在暫存區(qū)的文件快照儲存到git目錄中

  • changed but not updated:已跟蹤文件內(nèi)容發(fā)生改變,并沒有放入緩存區(qū)

  • Changes to be committed:已存入緩存狀態(tài)

  • Untracked files: git 不會自動將之納入跟蹤范圍

Four States

git 原理工作圖





暫存區(qū)index

index文件是個二進制文件,用cat命令是無法打開的

index 一堆亂碼

使用

hexdump -C index 
index內(nèi)部數(shù)據(jù)

具體數(shù)據(jù)代表的意義可以參考git index data format

總結(jié)

先打印log

git log

通過命令

git cat-file -p <commit id>
git cat-file

通過以上數(shù)據(jù)可以發(fā)現(xiàn)git所有功能都基于三棵樹。
  • 第一棵樹:所有提交的commit組成一棵樹,分別指向不同版本的提交
  • 第二棵樹:每個commit代表一棵樹,里面包含所有指向子樹的commit(tree),指向上一次的commit id(parent),每個tree里面有包含下一級的tree,blob文件的快照。
  • 第三課樹:index暫存區(qū)

綜上所述,git的實現(xiàn)都是通過比較遮三棵樹而進行工作的。

References

  1. Git 官方文檔
  2. Git man page
  3. A Little Of Git's Internals
  4. sed編輯二進制文件
  5. git index data format
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 以下筆記主要參考gitgot,大致了解git使用和原理。 第一部分我們從個人的視角去研究如何用好Git,并且揭示G...
    carolwhite閱讀 2,531評論 0 1
  • 今天閱讀了30分鐘卡耐基的人性的弱點,相信很多人都讀過。正如書中所說,人際交往或許是人類面臨的最大問題。 現(xiàn)如今,...
    書眠閱讀 240評論 1 1
  • 歌曲唱的 狂歡是一群人的孤單 每個人都是以單獨的個體存在的 所以或多或少的都會感到孤單。 前段時間我22歲生日 有...
    一個人遠航閱讀 712評論 1 7
  • 玩微信這么久,也累積了不少好友,有一批人什么時候都能聊得起來,也有一批人寡言少語不怎么聯(lián)系,人和人的感情,靠的不是...
    一點都不酷_67a1閱讀 690評論 0 0

友情鏈接更多精彩內(nèi)容