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基本操作流程
- 創(chuàng)建測試文件夾,名字我命名為JHGit;
mkdir JHGit

2.切換到JHGit文件夾下
cd JHGit
3.初始化git
git init

4.先查看下.git文件內(nèi)容
vi .git //或者
cd .git

也可以使用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

5.HEAD

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

7.description是描述文件

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

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

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

12.使用touch命令創(chuàng)建個test1文件,工作區(qū)會提示,通過命令
git add test1
將test1添加到暫存區(qū),也可以跳過add階段,既跳過使用暫存區(qū)域,直接把已經(jīng)跟蹤的文件暫存起來一起提交。
git commit -am“xx” || git commit -a -m“xx”



然后此時的.git變化如下


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



從上面幾幅圖可以看出,提交的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命令是無法打開的

使用
hexdump -C index

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

總結(jié)
先打印log

通過命令
git cat-file -p <commit id>

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