git基本命令还可以参考Pro Git;
以下是mac系统终端操作,常用命令可以参考//www.greatytc.com/p/3291de46f3ff
** 附上方便操作的终端快捷键**
Command + K 清屏
Command + T 新建标签
Command +W 关闭当前标签页
Command + S 保存终端输出
Command + D 垂直分隔当前标签页
Command + Shift + D 水平分隔当前标签页
Command + shift + {或}向左/向右切换标签
git基本操作流程
- 创建测试文件夹,名字我命名为JHGit;
mkdir JHGit
2.切换到JHGit文件夹下
cd JHGit
3.初始化git
git init
4.先查看下.git文件内容
vi .git //或者
cd .git
也可以使用tree命令!
温馨提示:mac下默认是没有 tree命令!!!下面几个方法可以试试
1.可以使用find命令模拟出tree命令的效果
find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'
2.手动alias一下,在你的.bash_profile或者.zshrc中添加:(前提你已经安装了oh-my-zash)
alias tree="find . -print | sed -e 's;[^/]*/;|____;g;s;____|; |;g'"
3.可以使用 homebrew 安装 tree 命令行:
brew install tree
5.HEAD
6.查看下config里面的东西:设置了一些默认的参数之类的
cat .git/config
7.description是描述文件
8.根据HEAD打印的路径提示找到refs/heads/下
9.hooks(脚本文件夹),具体了解可以参考GIt Hooks
10.info里面的exclude objects里面的info和pack目前都是空文件
11.和远程仓库建议联系
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内容变为下图
12.使用touch命令创建个test1文件,工作区会提示,通过命令
git add test1
将test1添加到暂存区,也可以跳过add阶段,既跳过使用暂存区域,直接把已经跟踪的文件暂存起来一起提交。
git commit -am“xx” || git commit -a -m“xx”
然后此时的.git变化如下
使用log命令可以看到最近的log日志
git log
从上面几幅图可以看出,提交的commit消息,最新的commit id和origin的commit id都会被保存
下面引入git的主要工作方式
三个区域
- 工作区
- 暂存区
- git仓库
Three Sections
四种状态
已跟踪(tracked)已提交(commited) 已修改(modified) 已缓存(staged)
在工作目录中修改某些文件
对修改的文件做快照,并保存到暂存区
提交更新,将保存在暂存区的文件快照储存到git目录中
changed but not updated:已跟踪文件内容发生改变,并没有放入缓存区
Changes to be committed:已存入缓存状态
Untracked files: git 不会自动将之纳入跟踪范围
Four States
git 原理工作图
暂存区index
index文件是个二进制文件,用cat命令是无法打开的
使用
hexdump -C index
具体数据代表的意义可以参考git index data format
总结
先打印log
通过命令
git cat-file -p <commit id>
通过以上数据可以发现git所有功能都基于三棵树。
- 第一棵树:所有提交的commit组成一棵树,分别指向不同版本的提交
- 第二棵树:每个commit代表一棵树,里面包含所有指向子树的commit(tree),指向上一次的commit id(parent),每个tree里面有包含下一级的tree,blob文件的快照。
- 第三课树:index暂存区
综上所述,git的实现都是通过比较遮三棵树而进行工作的。