Git 流程

Git 保存资料有四个区域

  • workspace:工作区
  • staging area:暂存区/缓存区
  • local repository:版本库或本地仓库
  • remote repository:远程仓库

区域间的关系


Git 配置

使用 git config 工具,来配置或读取 windows 不同环境下,Git 的相关信息和配置项。

不同环境配置方式

  1. Windows 所有用户可用:git config --system <相关配置信息>
  2. windows 当前用户可用:git config --global <相关配置信息>
  3. 当前项目可用:git config <相关配置信息>

使用配置信息

多种环境都设置了配置项,默认使用时的配置项根据优先级选择:

  1. 项目
  2. 当前用户
  3. 所有用户

配置用户信息

安装完 Git 之后就需要配置用户信息。每次提交的数据都会用此用户信息来区分数据的提交者。【必须配置项】

  1. 配置用户名:
    • git config --global user.namme "<自定义>"
  2. 配置用户Email:
    • git config --global user.namme <自定义email>

其他配置项

  1. 配置文本编辑器:(一般使用 Vi 或者 Vim)
    • git config --global core.editor <工具名称,如:emacs>
  2. 配置差异分析工具:
    • git config --global merge.tool <工具名称,如:vimdiff>

查看配置信息

  1. 查看所有配置信息:
    • git config --list
  2. 查看【指定环境】的【指定配置】信息:
    • git config --global user.name

vim 文本编辑器

vim 是一个文本编辑器,https://www.vim.org/download.php 官网下载,环境变量配置 vim.exe 所在目录,即可在 DOS 命令编辑文件

当执行 git commit 或某些命令,会打开 vim 文本编辑器,此处介绍使用 Git 时调出 vim 编辑器常用命令

vim 的三种模式:

  1. 命令模式
    • 调用相关命令进行一些操作做,如:复制、粘贴、删除、撤销、光标移动等
  2. 编辑模式
    • 用于编辑文本的信息
  3. 底线命令模式
    • 在最末行通过命令将进行一些操作,如:保存、退出等

vim 进入模式

  1. 命令模式:
    • 刚打开的文件就处于命令模式
    • 按键 esc 进入命令模式
  2. 编辑模式:
    • 按键 i 进入编辑模式
  3. 底线模式:
    • 按键 : 进入底线模式
    • 使用命令,要删除全部末行内容

常用命令

  • 底线模式:
    1. 保存
      1. :w:保存
      2. :w <文件路径>:另存为
    2. 退出
      1. :q:退出
      2. :wq:保存并退出
      3. :q!:强制退出

创建仓库

  1. 仓库:工作区、.git 所在的目录,此目录即为仓库
  2. 创建 Git 仓库,会在仓库目录下生成一个隐藏的 .git 文件夹
作用 代码 说明
初始化仓库 git init 当前目录下创建隐藏的 .git 目录
git init <路径> 在指定路径下创建隐藏的 .git 目录
克隆当前分支 git clone <目标仓库地址> 将目标地址仓库的当前分支,克隆到当前目录下(包括仓库目录)
git clone <目标仓库地址> <指定路径> 将目标地址仓库的当前分支,克隆到指定目录下(只克隆仓库内容)
克隆指定分支 git clone -b <分支名> <目标仓库地址> 将目标地址仓库的指定分支,克隆到当前目录下(包括仓库目录)
git clone -b <分支名> <目标仓库地址> <指定路径> 将目标地址仓库的指定分支,克隆到指定目录下(只克隆仓库内容)

本地库操作


添加

工作区 的文件添加到 暂存区

命令 说明
git add <文件名.tet> <文件名.pdf> <文件名> 添加指定(多个)文件到暂存区
git add <路径> 将指定 目录目录下的内容 添加到暂存区【目录也算内容】
git add . 当前目录下所有文件,添加到暂存区
git add --all 仓库 下所有文件,添加得到暂存区【仓库中任意位置执行都可】

提交

暂存区 内容添加到 本地仓库

命令 说明
git commit 将暂存区的所有文件提交到本地库
(通过 vim 编辑器填写备注信息进行提交)
git commit -m "<备注信息>" 将暂存区的所有文件提交到本地库
git commit <文件> <文件> ... -m <备注信息> 将暂存区中指定(多个)文件提交到本地库

工作区 中进行了修改、删除操作的文件,直接提交到 本地库
工作区新增的文件还是需要先 git add 添加到暂存区,再从暂存区提交到本地库

命令 说明
git commit -a 通过 vim 编辑器填写备注信息进行提交
git commit -a -m "<备注信息>" 直接添加备注信息进行提交
git commit -am "<备注信息>" 效果与 git commit -a -m "<备注信息>" 相同

查看

查看 工作区暂存区文件状态

命令 说明
git status -s 以简短方式输出状态
git status 完整的状态和提示
状态码 说明
红色 工作区文件的状态
绿色 暂存区文件的状态
?? 工作区的文件,暂存区中没有,没有 git add 过(文件未被git管理,即没有建立追踪),
A 暂存区的文件,版本库中没有,没有 git commit 过
M 文件内容或mode被修改
C 文件的一个新拷贝
D 删除的文件,Git版本库中还存在
R 文件名被修改
T 文件类型被修改
U 文件没有被合并(需要完成合并才能进行提交)
X 未知状态(bug)

查看 暂存区 的文件

命令 说明
git ls-files –c 显示 暂存区 中的文件
git ls-files 默认:同 git ls-files -c 一样
git ls-files -d 显示 暂存区工作区 缺少的文件
git ls-files -m 显示 暂存区工作区 内容不同的文件
git ls-files -o 显示 暂存区 未从 工作区 添加过的文件(未 git add)
git ls-files -s 显示 暂存区 文件的 模式位对象名称阶段编号
git ls-files -s <文件名> 显示 暂存区 指定文件的 模式位对象名称阶段编号

查看 文件工作区暂存区版本库 之间 内容差异

返回数据的查看方式:

  • 新内容
    • +
    • 绿色
  • 旧内容
    • -
    • 红色
  • 新/旧内容
    • 新改的文件内容,旧的文件内容
    • 新文件优先级:工作区 > 缓存区 > 存储库
命令 说明
git diff 工作区 状态是 M 的所有文件,与 缓存区 的差异内容
git diff <文件名> 工作区 状态是 M 的指定文件,与 缓存区 的差异内容
git diff --cached 暂存区 状态是 AM 的所有文件,与 存储库 的差异内容
git diff --cached <文件名> 暂存区 状态是 AM 的指定文件,与 存储库 的差异内容
git diff HEAD 工作区暂存区 状态是 M 的所有文件,与 存储库 的差异内容
git diff HEAD <文件名> 工作区暂存区 状态是 M 的指定文件,与 存储库 的差异内容
git diff HEAD^ 工作区暂存区 状态是 M 的所有文件,与 存储库 的回退一次的差异内容
git diff HEAD~2 工作区暂存区 状态是 M 的所有文件,与 存储库 的????????差异内容

查看文件内容

命令 说明
git cat-file -p <id> 根据 commit-id、HEAD 等信息查看文件的内容

回退

工作区暂存区存储库 内容依据 存储库 进行回退
(可以回退指定文件)

命令 说明
git reset --mixed 暂存区 回退到 存储库 当前的版本(即:上次commit提交的内容)
git reset git reset --mixed 一样【默认】
git reset <HEAD> 暂存区存储库 回退到 存储库 之前指定某版本
git reset --soft <HEAD~n> 存储库 回退到 存储库 之前的某个版本(HEAD代表当前版本)
git reset --hard 工作区暂存区 回退到 存储库 当前版本,并删除回退点之后所有编辑内容(未commit的)
【谨慎使用,会删除回退点之后的所有编辑内容(未commit的)】
git reset --hard <HEAD> git reset --hard 一样【或:指定版本(HEAD~n、HEAD^^)】

暂存区 内容回退到 工作区

命令 说明
git restore <文件名> 暂存区 指定文件回退到 工作区
git restore . 暂存区 所有文件回退到 工作区

HEAD 用来指定版本

^ 指定版本

  • HEAD:当前版本
  • HEAD^:上一个版本
  • HEAD^^:上上一个版本
  • HEAD^^^:上上上一个版本
  • 以此类推……

~ 指定版本

  • HEAD:当前版本
  • HEAD~0:当前版本
  • HEAD~1:上一个版本
  • HEAD~2:上上一个版本
  • 以此类推……

删除

三种参数 -f --cached -r 可以相互结合使用

命令 说明
git rm <文件名> 工作区暂存区存储库 文件内容相同,将文件从 工作区暂存区 删除
git rm -f <文件名> 工作区暂存区存储库 中文件内容不同,强行将 工作区暂存区 内容删除
git rm --cached <文件名> 工作区暂存区存储库 文件内容相同,仅删除 暂存区 内容
git rm -r <目录> 删除 工作区暂存区 中,指定目录即目录下所有目录和文件
git rm -r * 删除 工作区暂存区 中,当前所在目录的所有目录和文件

历史

查看历史提交记录
【只能看到 HEAD 指针之前的版本信息】
【无法看到删除了 commit 记录和执行了 rebase、reset、merge 之后的记录】

命令 说明
git log 历史提交记录
git log <文件名> 查看指定文件历史提交记录
git log --oneline 历史提交记录,简洁版
git log --graph 查看历史中什么时候有分支、合并
git log --reverse 逆向显示所有历史记录
git log --author=<用户名> 查看指定用户提交历史记录
git log --before={<指定日期>} 查看指定日期之前的历史记录
git log --after={<指定日期>} 查看指定日期之后的历史记录
git log --no-merges 隐藏合并提交

查看参考日志
【保留了从clone仓库开始,用户所有在本地库中的提交记录】

命令 说明
git reflog 查看历史所有的 提交 记录
git reflog <文件名> 查看指定文件历史所有的 提交 记录

查看历史添加记录

命令 说明
git fsck --lost-found 查看历史中添加到 暂存区 ,但未提交到 存储库 ,并且被其他操作顶替掉的 暂存区 记录(blob数据格式代表文件内容)

查看指定文件提交的历史 修改记录

命令 说明
git blame <文件名> 显示文件中每行内容,最后一次修改的提交记录(HEAD、用户名、时间、代码行数、备注信息)
git blame -L <代码行1>,<代码行2> <文件名> 文件代码行1,到代码行2最后一次的修改记录

远程库操作


库操作

命令 说明
git remote add <远程库-别名> <远程库-地址> 添加 远程库
git remote -v 查看 已经添加的远程库
git remote rm <远程库-别名> 删除 添加的远程库
git remote update <远程库-别名> --prune 更新 远程库,更新后可以看到远程库最新的分支(也不知道对不对,??????待续)
git remote rename <旧-远程库-别名> <新-远程库-别名> 修改 远程库的 别名
git remote show <远程库-别名> 查看 指定远程库的 信息

拉取合并

命令 说明
git fetch <远程库-别名> 将远程库全部 取回 到本地(不影响本地库)
git fetch <远程库-别名> <远程分支名> 将远程库指定分支,拉取 到本地(不影响本地库)
git merge <远程库-别名>/<远程分支名> 将远程库指定分支,合并 到存储库当前分支(也不知道对不对,??????待续)
git pull <远程库-别名> <远程分支名>:<本地分支名> 将远程库指定分支,拉取合并到本地指定分支(等同于 fetch merge 同时使用)
git pull <远程库-别名> <远程分支名> 将远程库指定分支,拉取合并到 当前 分支(等同于 fetch merge 同时使用)

推送

命令 说明
git push <远程库-别名> <本地分支名>:<远程分支名> 将本地指定分支 上传 到远程库并与远程库指定分支 合并
git push <远程库-别名> <本地分支名> 本地分支和远程 分支同名,将本地分支上传并合并(必须这么写,不然会有警告提示)
git push --force <远程库-别名> <本地分支名> 本地版本与远程版本有差异,可以进行 强推,覆盖远程代码
git push <远程库-别名> --delete <远程分支名> 删除 远程库的指定分支
git push <远程库-别名> <本地分支名>:<远程分支名> 将本地指定分支,上传合并到一个不存在的远程分支,远程库会 创建 一个同名分支

分支管理

分支:像是不同走向的快照,向不同方向组成的树杈


查看分支

命令 说明
git branch 列出 本地分支
git branch -v 列出 本地分支最后快照信息
git branch -a 列出 远程分支本地分支
git branch -r 列出 远程分支

创建分支

命令 说明
git branch <分支名> 创建分支(根部为当前分支)

切换分支

命令 说明
git checkout <分支名> 切换到指定分支(切换分支时,分支的最后快照会替换工作区内容)
git checkout -b <分支名> 创建并切换到该分支

合并分支

命令 说明
git merge <分支名> 将指定分支合并到当前所在分支

删除分支

命令 说明
git branch -d <分支名> 删除指定分支