01《玩转Git三剑客》学习笔记@Git实践(一)
发布于 2022年 02月 10日 00:59
一、Git基础
1. Git安装
# 校验是否安装成功:输出版本号即安装成功。
git --version
2. 使用Git
前需要做的最小配置
# 用户名设置
git config --global user.name <your_name>
# 用户邮箱地址设置:便于Code Review邮件发送
git config --global user.email <your_email>
config
的三个作用域:
--local
:只对某个仓库有效。缺省时的默认值。--global
:对当前用户所有仓库有效。--system
:对系统所有登录的用户有效。
- 显示
config
的配置,加--list
。# 查看命令 git config # 查看所有 git config --list # 分类查看 git config --list --local git config --list --global git config --list --system
3. 创建一个仓库
- 把已有的项目代码纳入
Git
管理:cd 项目代码所在的文件夹 git init
- 新建项目直接用
Git
管理:cd 某个文件夹 git init <your_project> cd <your_project>
Git
常用命令:
# 创建仓库
git init [<project_name>]
# 查看工作区和暂存区状态
git status
# 新增单个改动文件到暂存区
git add <file_name>
# 新增整个文件夹下的文件到暂存区
git add <file_folder>
# 同时新增单个文件和整个文件夹下的文件到暂存区
git add <file_name> <file_folder>
# 增加所有改动到暂存区
git add .
# 同步所有改动文件到暂存区
git add -u
# 创建commit
git commit -m "<commit_message>"
# 直接同步工作区的内容到版本历史
git commit -am "<commit_message>"
# 查看当前分支日志
git log
# 查看所有分支日志
git log --all
# 查看简洁版日志
git log --oneline
# 查看最近几次日志
git log -n4
# 查看最近几次简洁版日志
git log -n2 --oneline
# 图形化查看日志
git log --all --graph
# 查看本地分支
git branch -v
# 创建分支
git checkout <branch_name>
# 创建并切换分支,默认基于当前分支节点创建
git checkout -b <branch_name>
# 基于现有分支或版本创建并切换分支
git checkout -b <branch_name> <old_branch | commit_id>
# 同步commit
git pull
# 提交commit
git push
# 重置工作区和暂存区的改动
git reset --hard [<回退到的commit_id>]
# 重置暂存区跟HEAD一致
git reset HEAD [<file_name>]
# 重置工作区跟暂存区一致
git checkout -- <file_name>
# 查看差异
git diff <commit_id_1> <commit-id_2>
# 比较暂存区和HEAD所含文件的差异,确认变更内容
git diff --cached
# 比较工作区和暂存区的差异
git diff [[<branch_name | commit_id> <branch_name2 | commit_id2> ... <branch_nameN | commit_idN>] -- <file_name> [<file_name2> ... <file_nameN>]]
# 删除分支: -d保险删除
git branch -d <branch_name>
git branch -D <branch_name>
# 修改最近次commit的message
git commit --amend
# 修改老旧commit的message
git rebase -i <目的commit_id的前一个commit_id>
# 开发中临时加塞紧急任务暂存信息
git stash
# 读取暂存信息到工作区
git stash apply
# git stash list 不保留信息
git stash pop
# 仓库备份:不带工作区
git clone --bare <git_address> <git_local_name>
4. 初识工作区和暂存区
工作区改动后
add
到暂存区,确认没问题后commit
到版本历史。
5. 简便快速给文件重命名
git mv <原文件名[.后缀]> <新文件名[.后缀]>
# 删除文件
git rm <file_name>
等同于如下3步:
1) 工作区修改文件名;
2) add
到暂存区;
3) commmit
到版本历史。
6. 通过图形界面工具来查看历史
gitk
gitk
中文乱码解决方案:
# 在C:\Users\Adminstrator\.gitconfig文件末尾加上如下内容设置下文件编码即可
[gui]
encoding = utf-8
7. 探秘.git目录
// git裸仓库目录
.git
├── config // 记录仓库配置信息
├── description
├── HEAD // 记录当前工作分支
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── fsmonitor-watchman.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── pre-merge-commit.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ ├── pre-receive.sample
│ ├── prepare-commit-msg.sample
│ └── update.sample
├── info
│ └── exclude
├── objects // 对象合集
│ ├── 0a // 松散tree
│ ├── ...
│ ├── info
│ └── pack // git自我梳理,打包0a松散文件
├── package.json
├── refs // 引用
│ ├── heads //分支,独立开发空间
│ └── tags // 标签,里程碑
└── yarn.lock
tips1
:用markdown
编写文件目录结构
- 全局安装
tree-node-cli
cnpm i tree-node-cli -g
- 进入到要生成目录的文件夹下
- 输入以下命令回车
# -L 确定要几级目录 # -I 排除哪个文件夹下的 # > 在README文件里生成项目结构树 tree -L 3 -I "node_modules" > README.md
tips2
:文件访问相关命令
# 输出文件内容
cat <file_name>
# 查看文件内容类型:commit,tree,blob
git cate-file -t <file_content>
# 查看文件内容
git cate-file -p <file_content>
8. commit
,tree
和blob
三个Git
对象之间的关系
commit
:每次变更。一个commit
对应一棵tree
。tree
:当前commit
对应的本项目仓库的文件夹(tree
)及文件(blob
)快照。blob
:内容相同的文件。不管文件名叫什么,只要文件内容相同,那就是一个blob
(节省存储空间)。
9. detached HEAD
分离头指针
# 唤起分离头指针
git checkout <commit_id>
基于某次commit
,不关联任何分支,分支切换时如若不关联分支即被丢失,可做尝试性变更开发。
10. HEAD
标识符
HEAD
可以指向分支、commit
(分离头指针),最终落脚于commit
(常用于快速指代)。
HEAD^
,即HEAD^1
或HEAD~1
:上一级。HEAD^^
,即HEAD^1^1
或HEAD~2
:上级的上级。