loading

一张脑图带你掌握Git命令

# 说明

参考文章:

【「一劳永逸」一张脑图带你掌握Git命令】--TianTianUp (opens new window)

【您必须知道的 Git 分支开发规范】 - 稻草叔叔 (opens new window)

# git 命令脑图

git 命令脑图链接 (opens new window)

# 基本概念

在这里插入图片描述

基于上面的图,我们就有接下来一些概念

# 版本库 .git

  • 当我们使用git管理文件时,比如 git init 时,这个时候,会多一个 .git 文件,我们把这个文件称之为版本库。
  • .git 文件另外一个作用就是它在创建的时候,会自动创建 master 分支,并且将 HEAD 指针指向 master 分支。

# 工作区

  • 本地项目存放文件的位置
  • 可以理解成图上的 workspace

# 暂存区 (Index/Stage)

  • 顾名思义就是暂时存放文件的地方,通过是通过 add 命令将工作区的文件添加到缓冲区

# 本地仓库(Repository)

  • 通常情况下,我们使用 commit 命令可以将暂存区的文件添加到本地仓库
  • 通常而言,HEAD 指针指向的就是 master 分支

# 远程仓库(Remote)

  • 举个例子,当我们使用 GitHub 托管我们项目时,它就是一个远程仓库。
  • 通常我们使用 clone 命令将远程仓库代码拷贝下来,本地代码更新后,通过 push 托送给远程仓库。

# Git文件状态

通常我们需要查看一个文件的状态

git status
1

Changes not staged for commit

表示得大概就是工作区有该内容,但是缓存区没有,需要我们 git add

Changes to be committed

一般而言,这个时候,文件放在缓存区了,我们需要git commit

nothing to commit, working tree clean

这个时候,我们将本地的代码推送到远端即可

# 常见命令

# git 配置命令

在这里插入图片描述

列出当前配置

git config --list   
1

列出 Repository 配置

git config --local --list
1

列出系统配置

git config --system --list
1

通过上述的命令,发现你并没有配置用户信息的话,接下来配置一下

配置用户名

git config --global user.name "your name"
1

配置用户邮箱

git config --global user.email "youremail@github.com"
1

# 分支管理

在这里插入图片描述

查看本地分支

git branch
1

查看远程分支

git branch -r
1

查看本地和远程分支

git branch -a
1

从当前分支,切换到其他分支

git checkout <branch-name>
// 举个例子
git checkout feature/tiantian
1
2
3

创建并切换到新建分支

git checkout -b <branch-name>
// 举个例子
git checkout -b feature/tiantian
1
2
3

删除分支

git branch -d <branch-name>
// 举个例子
git branch -d feature/tiantian
1
2
3

当前分支与指定分支合并

git merge <branch-name>
// 举个例子
git merge feature/tiantian
1
2
3

查看哪些分支已经合并到当前分支

git branch --merged
1

查看哪些分支没有合并到当前分支

git branch --no-merged
1

查看各个分支最后一个提交对象的信息

git branch -v
1

删除远程分支

git push origin -d <branch-name>
1

重命名分支

git branch -m <oldbranch-name> <newbranch-name>
1

拉取远程分支并创建本地分支

git checkout -b 本地分支名x origin/远程分支名x

// 另外一种方式,也可以完成这个操作。
git fetch origin <branch-name>:<local-branch-name>
// fetch这个指令的话,后续会梳理
1
2
3
4
5

# fetch 指令

在这里插入图片描述

fetch推荐写法

git fetch origin <branch-name>:<local-branch-name>
1
  • 一般而言,这个 origin 是远程主机名,一般默认就是 origin。
  • branch-name 你要拉取的分支
  • local-branch-name 通常而言,就是你本地新建一个新分支,将 origin 下的某个分支代码下载到本地分支。

举个例子

git fetch origin feature/template_excellent:feature/template_layout
// 你的工作目录下,就会有feature/template_layout
// 一般情况下,我们需要做的就是在这个分支上开发新需求
// 完成代码后,我们需要做的就是上传我们的分支
1
2
3
4

fetch其他写法

将某个远程主机的更新,全部取回本地。

git fetch <远程主机名> 
1

这样子的话,取回的是所有的分支更新,如果想取回特定分支,可以指定分支名

git fetch <远程主机名> <分支名>
1

当你想将某个分支的内容取回到本地下某个分支的话,如下

git fetch origin :<local-branch-name>
// 等价于
git fetch origin master:<local-branch-name>
1
2
3

# 花式撤销

在这里插入图片描述

撤销工作区修改

git checkout --
1

暂存区文件撤销 (不覆盖工作区)

git reset HEAD
1

版本回退

git reset --(soft | mixed | hard ) < HEAD ~(num) > |
1
指令 作用范围
--hard 回退全部,包括HEAD,index,working tree
--mixed 回退部分,包括HEAD,index
--soft 只回退HEAD

# 状态查询

展示Git命令大纲

  • git help (--help)

展示Git命令大纲全部列表

  • git help -a

展示具体命令说明手册

  • git help

# 文件暂存

在这里插入图片描述

添加改动到 stash

  • git stash save -a “message”

删除暂存

  • git stash drop stash@{ID}

删除全部缓存

  • git stash clear

恢复改动

  • git stash pop stash@{ID}

# 差异比较

在这里插入图片描述

比较工作区与缓存区

  • git diff

比较缓存区与本地库最近一次commit内容

  • git diff -- cached

比较工作区与本地最近一次commit内容

  • git diff HEAD

比较两个commit之间差异

  • git diff <commit ID> <commit ID>

# 分支命名

在这里插入图片描述

# master 分支

1、主分支,用于部署生产环境的分支,确保稳定性。

2、master 分支一般由 develop 以及 hotfix 分支合并,任何情况下都不能直接修改代码。

# develop 分支

1、develop 为开发分支,通常情况下,保存最新完成以及 bug 修复后的代码。

2、开发新功能时,feature 分支都是基于 develop 分支下创建的。

# feature 分支

1、开发新功能,基本上以 develop 为基础创建 feature 分支。

2、分支命名:feature/ 开头的为特性分支, 命名规则: feature/user_modulefeature/cart_module

# release 分支

1、release 为预上线分支,发布提测阶段,会 release 分支代码为基准提测。

# hotfix 分支

1、分支命名:hotfix/ 开头的为修复分支,它的命名规则与 feature 分支类似。

2、线上出现紧急问题时,需要及时修复,以 master 分支为基线,创建 hotfix 分支,修复完成后,需要合并到 master 分支和 develop 分支。

# 基本操作

有了上述的基本了解后,那么我们就来看看整体的一个流程吧。

  • 创建本地仓库 git init
git init
1
  • 链接本地仓库与远端仓库
git remote add origin

origin 默认是远端仓库别名 url 可以是可以使用 https 或者 ssh 的方式新建
1
2
3
  • 检查配置信息
git config --list
1
  • Git user name 与email
git config --global user.name "yourname"

git config --global user.email "your_email"
1
2
3
  • 生成SSH密钥
ssh-keygen -t rsa -C "这里换上你的邮箱"

cd ~/.ssh 里面有一个文件名为 id_rsa.pub,把里面的内容复制到 git 库的我的 SSHKEYs 中
1
2
3
  • 常看远端仓库信息
git remote -v
1
  • 远端仓库重新命名
git remote rename old new
1
  • 提交到缓存区
git add . 全部上传到缓存区

git add 指定文件
1
2
3
  • 提交到本地仓库
git commit -m 'some message'
1
  • 提交远程仓库
git push <远程主机名> <本地分支名>:<远程分支名>
1
  • 查看分支
git branch
1
  • 创建新分支
git branch
1
  • 切换分支
git checkout
1

# 忽略文件 .gitignore

这个文件的作用,会去忽略一些不需要纳入 Git 管理这种,我们也不希望出现在未跟踪文件列表。

那么我们来看看如何配置该文件信息。

# 此行为注释 会被Git忽略

# 忽略 node_modules/ 目录下所有的文件
node_modules


# 忽略所有.vscode结尾的文件
.vscode

# 忽略所有.md结尾的文件
*.md

# 但README.md 除外
!README.md

# 会忽略 doc/something.txt 但不会忽略doc/images/arch.txt
doc/*.txt

# 忽略 doc/ 目录下所有扩展名为txt文件

doc/**/*.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
最近更新时间: 2021/06/17 10:13:36
最近更新
01
2023/07/03 00:00:00
02
2023/04/22 00:00:00
03
2023/02/16 00:00:00