一、玩转Git三剑客-Git基础
Git的优点
- 最优的存储能力
- 非凡的性能
- 开源
- 很容易做备份
- 支持离线操作
- 很容易定制工作流程
git的安装
参考官方安装git
在终端输入git --version
可以看到git的版本信息,以此代表安装成功。
使用git之前要做的最小配置
配置user.name和user.email
1 | git config --global user.name "Your Name" |
config的三个作用域
缺省等同于local
1 | git config --local ## local只对某个仓库有效 |
显示config的配置,加--list
1 | git config --list --local ## local只对某个仓库有效 |
创建第一个仓库并配置local用户信息
把已有的项目代码纳入git管理
1
2cd 项目代码所在的文件夹
git init新建的项目直接用Git管理
1
2
3cd 某个文件夹
git init your_project #会在当前路径创建和项目同名的文件夹
cd your_project
进入git项目目录,配置local用户信息
1 | git config --local user.name "Your Name" |
如果在一个仓库中存在local用户与全局用户,那么local用户的优先级高于全局用户信息。
工作区和暂存区
1 | git add filename #将文件添加到暂存区 |
通过git add -u
命令可以将纳入git管理的文件所有更新文件进行添加。
给文件重命名的简便方法
通过git mv oldName newName
即可快速变更文件名,并且会自动添加到暂存区,直接通过commit即可提交。
查看git log
只看变更列表
1
git log --oneline
之查看最近的几次commit
1
git log -n2 --oneline
n2表示所有分支最近两个。
只看当前分支的历史
1
git log
查看全部分支
1
git log --all
图形化展示
1
git log --all graph
通过gitk查看版本历史
在项目目录输入gitk
即可。
探秘.git
config
文件配置文件,存放一些配置信息。
HEAD
文件引用文件,引用当前分支
refs
文件夹heads
分支文件夹,存放各个分支,其中内容表示commit的哈希值。
tags
标签或里程碑
objects
文件夹文件夹的名称与该文件夹内文件名拼成一个哈希值,表示一个树。
其内容为文件变动信息。
commit、tree和blob三个对象之间的关系
一个commit对应一颗树,树里边包含树(文件夹)。树中的文件为blob,文件夹则为另一个树,在这个文件夹中同理。叶子节点到文件。
git的设计,只要文件内容相同,就是一个东西。
分离头指针情况下的注意事项
分离头指针指的是没有基于某个分支来做修改。
好处
用于测试,如果测试结果不佳,则可以直接丢弃。
坏处
如果不跟分支挂钩,当切换分支时,如果不为刚才修改的commit创建分支,那么基于commit分支修改的内容会当作垃圾清理。
进一步理解HEAD和branch
head不仅可以指代新分支的最后一次提交,也可以指代具体commit。当作分支切换时,head会指向这个切换的分支。分支(commit)最后也要落脚于commit。
HEAD可以指代当前分支。例如比较每次commit的差异:
1 | #比较当前commit与上一次commit的差异 |
1 | #比较当前commit与上次commit的差异 |