Author: haoransun
Wechat: SHR—97
图片来源:极客时间,需个人购买教程。
前言 Git下载路径
参考 廖雪峰 Git文档
廖雪峰 Git文档
https://www.liaoxuefeng.com/wiki/896043488029600
1 | git --version //可查看版本即安装成功 |
1 使用Git前的小配置
1.1 配置User信息 (user.name 和 user.email)
方便代码变更时展示变更人信息 及 通知协作者。
1 | git config --global user.name 'your_name' |
1.2 config 作用域
1 | git config --local --list |
2 建Git仓库
2.1 常用命令
1 | git add // 添加文件到暂存区 |
2.2 优先级
local 优先级高于 global,即全局设置的global会被某一个local仓库的信息给覆盖
3 工作区与暂存区
1 | git add -u // 可以将已修改的 Git所管理的文件 一起提到暂存区,如下所示 |
4 Git 中的文件重命名
常规步骤
1 | mv old_name new_name // 重命名 |
Git方式重命名
1 | git mv old_name new_name // Git重命名文件 3合1 |
5 git log 查看版本演变历史
1 | git log // 查看当前分支详细版本历史 |
按需求组合:
1 | git log --oneline --all -n4 --graph // 查看简略ID |
使用网页方式查看相关命令帮助
1 | git help --web log // 以网页方式查看log命令用法 |
6 gitk 通过图形界面工具查看版本演变历史
1 | gitk |
7 探索.git目录
7.1 HEAD文件
1 | cat HEAD //查看HEAD文本内容 HEAD是一个引用,指向当前工作分支,指向的是refs文件夹下的heads文件夹下的某个分支的ID号 |
切换回master分支后,HEAD内容发生变化
7.2 config配置文件
对config作用域的user信息的修改直接保存到该文件中。
将user.name 由 local1 改为local2后,再次查看该文件发现已经更改
1 | git config --local --list //列出本地所有可以看得信息 |
再次修改回去
1 | git config --local user.name 'local1' |
7.3 refs文件夹
heads: 分支,一个独立的开发空间,前后端各1个分支,互不影响,需要集成时,合并到一个共同的分支上。
tags: 标签/里程碑 标明一个版本等。
heads文件夹
1 | git cat-file -t ID号前几位 //查看存放的对象是一个什么类型 (commit类型) |
tags文件夹
1 | git cat-file -p ID号前几位 // 查看内容(tag类型) |
7.4 objects文件夹
查看98文件夹下存放的类型与内容
1 | git cat-file -t 98拼上里面存放的ID号前几位 //看类型(tree类型) |
1 | git cat-file -p 98拼上里面存放的ID号前几位 //看内容 |
内容是文本里的内容信息
核心类型:
TREE / COMMIT / BLOB
8 commit、tree、blob 三者关系
Git眼中,文件内容完全相同,就被认为是同一个对象。
**
一个commit 对应一个 tree
blob 对应文本文件
tree 对应文件夹,文件夹下可能有tree或者blob
**
9 tree的个数
查看某个目录下类型是文件的命令
1 | find .git/objects -type f |
2个tree,1个commit,1个blob
10 分离头指针时的注意事项(detached HEAD)
如果此时对某些文件做了修改,并提交到仓库后,切换分支时,会提示是否给当前没有依赖的变更创建新的分支,如果不创建,会丢失这次修改。
在Git看来,如果没有将某个commit与分支或者tag绑定,都会被清除
按照提示 git branch branch_name ID号 进行分支的挂钩,即可保留修改。
因此,分离头指针指的是 某个变更没有基于branch进行,在切换分支时,分离头指针下的commit会被Git当做垃圾清理掉。如果这些变更是重要的,要与某个分支绑定在一起。
11 HEAD 与 branch
1 | git checkout -b new_branch_name //基于当前分支创建新分支 |
此时 .git/HEAD 的引用也指向了新的分支
HEAD 既可以指向最后一次提交的分支,也可以不与任何分支挂钩(即处于分离头指针状态下),整个HEAD指向了某个 commit上。当做分支切换时,HEAD指向新分支
HEAD 指向分支,分支指向commit,或者HEAD直接指向commit.
比较两次commit的差异性
1 | git diff 待比较ID1 待比较ID2 // ID1与ID2的提交比较 |