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的三个作用域:
    1. --local:只对某个仓库有效。缺省时的默认值。
    2. --global:对当前用户所有仓库有效。
    3. --system:对系统所有登录的用户有效。
  • 显示config的配置,加--list
    # 查看命令
    git config
    # 查看所有
    git config --list
    # 分类查看
    git config --list --local
    git config --list --global
    git config --list --system
    

3. 创建一个仓库

  1. 把已有的项目代码纳入Git管理:
    cd 项目代码所在的文件夹
    git init
    
  2. 新建项目直接用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编写文件目录结构

  1. 全局安装tree-node-cli
    cnpm i tree-node-cli -g
    
  2. 进入到要生成目录的文件夹下
  3. 输入以下命令回车
    # -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. committreeblob三个Git对象之间的关系

  1. commit:每次变更。一个commit对应一棵tree
  2. tree:当前commit对应的本项目仓库的文件夹(tree)及文件(blob)快照。
  3. blob:内容相同的文件。不管文件名叫什么,只要文件内容相同,那就是一个blob(节省存储空间)。

9. detached HEAD分离头指针

# 唤起分离头指针
git checkout <commit_id>

基于某次commit,不关联任何分支,分支切换时如若不关联分支即被丢失,可做尝试性变更开发。

10. HEAD标识符

HEAD 可以指向分支、commit(分离头指针),最终落脚于commit(常用于快速指代)。

HEAD^,即HEAD^1HEAD~1:上一级。
HEAD^^,即HEAD^1^1HEAD~2:上级的上级。

11. .gitignore指定不需要Git管理的文件

推荐文章