Git 基础入门
下载与安装
https://git-scm.com/downloads
最小配置
配置 user.name
和
user.email
1 2
| git config --global user.name '<用户名>' git config --global user.email '<电子邮件>'
|
仅对某个仓库有效 |
对当前用户所有仓库有效 |
对系统所有登录的用户有效 |
- 显示
config
配置,加上 --list
, 如
1
| git config --list -- global
|
创建仓库
已有项目纳入 Git 管理
新建项目用 Git 管理
1 2 3
| cd <某个文件夹> git init <项目名> # git 会创建与项目名同名的文件夹 cd <项目名>
|
(可选)配置 local 用户信息
1 2
| git config --local user.name '用户名' git config --local user.email '电子邮件'
|
暂存、提交
暂存
语义为
update,即将已经跟踪的文件添加到暂存区 |
语义为
all,即将所有的文件添加到暂存区 |
提交
其他常用的命令
git status
:git 管理文件状态
git log
:查看提交记录
1 2 3 4 5
| git log # 默认命令(仅显示当前分支) git log --oneline # 仅显示历史提交信息 git log -n<数字> # 显示最近几次提交历史(次数由数字决定) git log --all # 查看所有分支log git log --graph # 图形化方式显示(log前会有线,分析多分支版本关系常用)
|
1
| git cat-file -t <哈希值> # 查看对应 哈希值 对应的类型
|
1
| git cat-file -p <哈希值> # 查看对应 哈希值 对应的内容
|
1 2
| git checkout <与当前分支不同的已存在的分支名> # 切换分支 git checkout -b <新分支名> <commitid> # 检出对应版本,并创建新分支管理
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # # 默认命令,显示所有分支,并注明当前处于哪个分支 git branch # 除了默认显示信息,加入了最近一次提交信息 git branch -v
# # 基于当前最新版本,创建新分支 git branch <新分支名> # 基于commitid 或 tag,创建新分支 git branch <新分支名> < commitid | tag >
# # 删除对应分支 git branch -d <已存在的分支名>
|
1
| git diff <commitid1> <commitid2> # 显示两个提交之间的差异
|
应用
给文件重命名
1 2
| git mv <原文件名> <新文件名> git commit -m '提交信息' # 可直接提交,不需通过 add 加入暂存区
|
其他
.git 目录解析
目录结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # 目录结构(初始) ├─hooks ├─info ├─objects │ ├─info │ └─pack └─refs ├─heads └─tags # 目录结构(有提交后) ├─hooks ├─info ├─logs │ └─refs │ └─heads ├─objects │ ├─1b │ ├─c8 │ ├─dc │ ├─info │ └─pack └─refs ├─heads └─tags
|
含义
HEAD
文件,存储了当前指向哪个分支
config
文件:当前项目的配置信息
refs/heads
文件夹:存储分支信息
refs/tags
文件夹:存储标签信息(用于如
里程碑 设置)
objects
文件夹:无含义的文件夹名和对应文件夹下的文件名拼接,形成哈希值,利用
git cat-file
可查看对应的信息。
commit、tree、blob
对象之间的关系
- 每个 commit 对应一颗 tree
- tree 指明了当前 commit
的文件目录结构。 tree 中可包含 tree 和
blob
- blob 代表文件
潜在错误:分离头指针
1
| git checkout <哈希值> # 分离头指针(这个分支没有被 git 管理)
|
1
| git branch <新分支名> <commitid>
|
1
| git checkout -b <新分支名> <commitid>
|