文章目录
- Git简介
- 下载安装
- 基本使用
- 起始配置
- Git 的三个区域
- 基本操作流程
- 查看仓库状态
- 删除(撤销暂存区)
- 差异对比
- 查看版本日志
- 版本回退
- 修改提交日志
- 分支
- 概念:
- 创建分支与切换分支
- 合并分支(快速合并)
- 合并分支(提交合并)
- 删除分支
- 分支变基
- tag 【标签】
- 游离分支
- GitFlow
- 远程仓库
- 关联远程仓库
- 推送远程
- 拉取远程分支代码
- 关于冲突
- 克隆远程库
- 本文 Git 命令汇总
Git简介
Git
是一款免费的开源分布式版本控制系统
,旨在快速高效地处理从小型到超大型项目的所有项目。它可以追踪文件的更改
,并能多人协同开发
。Git 是目前最流行的版本控制系统,其主要功能包括:
代码备份
版本控制
多人协作
权限控制
下载安装
下载地址 Git官网下载地址
基本使用
起始配置
-
第⼀次使用 Git 的时候,我们需要
配置姓名和邮箱
,让Git 知道当前开发者的基本信息
- 配置姓名:
git config --global user.name "User Name"
-
- 配置邮箱:
git config --global user.email "email...com"
备注
: 可以使⽤ git config --list
或 git config -l
命令来查看配置信息。
Git 的三个区域
⼯作区
(代码编辑区)暂存区
(暂时存储区)版本区
(版本控制区)
工作区、暂存区、版本区,三个区共同组成了⼀个 Git 仓库
基本操作流程
- 在项目根目录下执行
git init
初始化命令 会生成一个.git
文件夹,这样就成功的初始化了一个本地仓库
,而此时根目录下的文件就处于工作区
git init
- 执行命令
git add [file]
,可以指定将某个指定文件提交到暂存区
,同时也可以执行以下三种命令之一,将工作区的所有文件
都提交到暂存区
git add -Agit add * git add .
- 执行命令
git commit -m '提交的备注'
将暂存区
的所有文件提交到版本控制区
,这时候,这个文件就真正的受到了 Git 的版本控制
,并生成了一个独一无二的版本记录
git commit -m "提交了a文件"
流程图示:
查看仓库状态
- 执行
git status
命令⽤于显示仓库当前的状态
,git status -s
也⽤于查看仓库状态,但提示更为简短。
初始化仓库后,若还没有项目文件
或需要提交的内容,则提示如下:
如果此时工作区
有一个文件,还没有提交暂存区
则会提示:
若暂存区
已有内容但是还没有
提交版本区
,提示如下:
删除(撤销暂存区)
运行以下命令:
git rm --cached <file> //撤销暂存区指定文件git rm --cached -r . //撤销暂存区所有文件
差异对比
运行以下命令:
git diff
用于 对比 :工作区
vs 暂存区
git diff --cached
用于 对比 :版本区
vs 暂存区
查看版本日志
借助于以下命令可以查看 git 的 整个版本提交记录
git log
git log
-
git log --oneline
-
git log --oneline
在git log
的基础上提供更简洁的版本提交记录
git log --oneline
-
git reflog
-
git reflog
可以提供更加完整的版本提交记录
git reflog
版本回退
当我们在
git
中提交创建了多个版本记录
时,我们就可以在这些多个版本之间
任意的切换回到不同的版本
时间点。
- 使用
git reset --hard
命令进行版本之间的切换回滚
git reset --hard [版本号]
值得注意
使用 git reset --hard
切换版本后会有以下操作:
- 切换
版本区 HEAD
指针指向 - 还原
暂存区
到对应版本 - 还原
工作区
到对应版本
所以在执行 git reset --hard
切换版本之前 ,需要通过git add
或 git commit
清空当前工作区
以及暂存区
之后再进行版本切换
--soft
:重置HEAD
到指定提交,所有的更改都会自动添加到暂存区,对工作区无影响--mixed
: (默认值):重置HEAD到指定的提交,并且重置暂存区,对工作区无影响--hard
: 重置HEAD
到指定的提交,并且重置暂存区,重置工作区
修改提交日志
当有时候我们进行了一次
commit
的版本提交,这时候如果想对最近的一次提交日志做出更改可以用以下命令:
命令:git commit --amend
- 命令可以
重新编辑最近一次的版本
提交日志 - 将新的更改
合并
到最近一次的提交中
如果想将当前的更改,合并到最近上一次的更改记录中,而不是形成一个新的提交记录,只需要先将当前工作区的文件
git add
添加到暂存区,再使用git commit --amend -m "日志"
,添加合并到上一次提交中,这样一来两次提交就共享一次提交记录
分支
概念:
分支
是 Git 的一个重要的特征,它可以使开发人员,从主分支上衍生出多个独立的分支
,最后可以选择性的将衍生分支决定是否合并到主分支上
创建分支与切换分支
- 在创建分支之前,我们可以使用命令
git branch
来查看当前仓库下存在哪些分支,初始默认情况下,我们的默认主分支为master
或main
,这时候我们使用git branch <分支名>
,就可以成功创建一个分支了。
值得注意
:
在项目初始化的时候,如果就想立即建立一个衍生分支,则需要保证当前的主分支至少进行了一次
commit
版本提交,否则可能会报错fatal: not a valid object name: 'master'
。遵循着所有的衍生分支
都必须处于主分支
的版本下继承诞生,如果初始化的时候,主分支
都还没commit
诞生版本,这个时候对于版本区来说主分支
都还没有诞生,那么依赖于主分支的衍生分支
这时候自然也是无法创建的。
所以:当衍生分支
创建后,提交记录并不是空的,依然保留继承着截止创建衍生分支
时,主分支
当前最新的提交记录。所继承主分支最新提交的这次版本记录,被称为基点
- 创建分支后,可以使用
git checkout <分支名>
命令来切换当前的分支。
注明:
- 在切换分支之前,需要将当前分支管理好,最好进行
git add
或git commit
,清空当前工作区或暂存区。 - 切换分支后,工作区和暂存区会受到相应的影响。表现为:
- 工作区:会变成
切换到的当前分支
的最后一次提交状态
- 暂存区:同上,并且如果当前暂存区有
未提交
的更改,那么这些更改会被带到新分支的暂存区上
。
- 工作区:会变成
合并分支(快速合并)
-
如果我们当前版本存在两个分支,
master
和test
分支,且这时候test
分支领先于master
分支,同时test
分支继承了master
分支的全部版本记录
,这时候就可以触发快速合并
-
合并分支的时候需要先将分支切换到,想要
合并的到的目标分支
,然后执行git merge test
命令将test
分支的版本内容合并到master
分支,合并成功后,工作区
也会看到test
分支的内容了,同时也可以看到合并后的版本提交记录了。
合并分支(提交合并)
如果当要合并的两个分支,出现
不一致的版本
的时候,则会在拿到当前分支最新版本的提交 和 想要合并分支的最新版本提交
,在当前分支形成一个新的版本
提交记录,这时候需要手动补充新版本的提交日志描述,合并指令同上。
删除分支
git branch -d <分支名> //删除分支
git branch -D <分支名> // 强制删除分支
备注说明:
删除分支的时候,我们需要
切出要被删除的分支
,同时如果,当我们要删除的分支上的文件发生变化后,在删除的时候,可能会发出警告,这时候我们有以下几种处理方式:
- 第一种方式:将要删除的分支合并到一个其他的分支,再进行删除.
- 第二种方式:使用
git branch -D xxx
强制删除。 - 第三种方式:使用
git config advice.forceDeleteBranch false
命令关掉该提示。
分支变基
所谓的
变基
其实就是把当前分支的提交记录与目标分支(主分支)的最新的提交记录做线性合并
,也可以理解为把当前分支与主分支分离时的那次提交记录,变化成主分支的最新一次提交记录
,这样当前分支就也具备了主分支的所有提交记录加上当前分支的所有提交记录,并作一个线性记录
展示。
命令
git rebase <需要变基的目标分支,多用于主分支 master >
tag 【标签】
在 Git 中,标签(Tag)是用来指向特定提交的引用,通常用于
标记项目中的重要点
,比如版本发布。标签分为两种类型:
- 轻量标签(Lightweight)
轻量标签只是
简单地指向描述一个提交
,不包含其他信息,创建轻量标签不会存储任何额外的信息。
- 附注标签(Annotated)
附注标签存储了
额外的信息
,例如:标签名、标签信息、创建者名字、电子邮件、创建日期
等。因为它们包含了更多的信息,附注标签更适用于公共或正式发布
的场合,比如软件版本的发布。
创建标签
命令 | 描述 |
---|---|
git tag 标签名 版本号 | 给指定提交打 轻量标签 |
git tag -a 标签名 版本号 -m "标签描述" | 给指定提交打 附注标签 |
git tag | 查看标签 |
git show 标签名 | 查看标签信息 |
git tag -d 标签名 | 删除标签 |
游离分支
git checkout
也可以将代码签出到指定版本
,即可以执行git checkout 具体版本号
,当签出到指定提交版本
时,签出的代码出于一个临时的游离分支中,如下图操作
值得注意:
(重要
)
在游离分支上也可以对代码进行版本控制,但要特别注意:一旦从游离分支切走
,游离分支的提交不会交给任何一个分支
,因为它是临时
的,所以对于游离分支我们的使用原则是:
- 要尽量避免
修改游离分支的代码
(只是看一看某个版本的代码) - 若确实需要修改游离分支代码,应该从当前游离分支,创建出一个新的分支,随后去修改
- 若修在游离分支上发生了提交,随后从游离分支切走了,就要使用
reflog
寻找游离分支的提交
GitFlow
GitFlow 【分支模型】
是团队协作开发的一种最佳实践方式之一,将代码划分为以下几个分支
分支 | 描述 | 对应环境 |
---|---|---|
master | 主分支 ,只保存正式发布 的代码 | 生产 环境 |
develop | 开发分支 ,开发者的编写的代码最终要汇总在这个分支 | 开发 环境 |
hotfix | 线上紧急修复分支 ,修复完毕后要合并回 master 和 develop 分支,同时在 master 分支上打一个 tag 标签 | 开发 环境 |
release | 预发布分支 ,Release 分支基于 Develop 分支创建,在这个 Release 分支上测试 | 测试 环境 |
feature | 功能分支 ,当开发某个功能时创建一个单独的分支,开发完毕后再合并到 develop 分支 | 开发 环境 |
远程仓库
关联远程仓库
第一步:首先维护好本地仓库再进行远程管理(所有文件均接受版本控制)。
第二步:注册并激活 Gitee或 Github 账号。
第三步:创建远程仓库,并获取仓库的地址。
第四步:配置本地仓库关联远程仓库
git remote add origin https://xxxx/xxxx/xxxxx.git
注明:
- 查看当前仓库关联远程仓库地址:
git remote -v
- 更改远程仓库的 URL:
git remote set-url origin
新的仓库URL - 删除与远程仓库的关联:
git remote remove origin
推送远程
git push -u origin master
备注说明:
push
表示推送。-u(upstream)
表示关联,加上-u
以后,后续提交时可以直接使用 git push 即可。origin
远端仓库的别名。master
要推送到的远程目标分支,建议和当前本地分支同名。
拉取远程分支代码
当本地仓库想获得远程仓库的最新修改时,可以使用
git pull
命令拉取远端代码。
git pull
说明:
备注:
git pull
会将远端代码自动执行合并操作
,即:将远程分支的修改合并到本地当前分支
。
关于冲突
合并/变基
引起的冲突:两个分支在同一文件的同一位置
都有修改时,合并或变基时会引起冲突。拉取
引起的冲突:不同的开发者修改了同一文件的同一位置
都有修改时,拉取代码会有冲突。克隆远程库
克隆远程库
获取一个远程仓库的地址,随后执行克隆命令
git clone https://xxxx/xxxx/xxxx.git
注意:
默认这样直接克隆下来的是包含
整个仓库的所有分支
以及各分支段的所有提交记录
- 克隆下来的仓库,使用
git branch
命令,只能看到默认分支
,其他分支其实也已经克隆下来了
,但不出现在git branch
列表中,需要使用git branch -r
或gir branch -a
来查看。
- 需要切换到其他分支时,可以直接
git checkout -b xxx origin/xxx
来进行切换,当然对于1.7.0
以后的git
版本,也可以使用简短的命令:git checkout xxx
来切换。
还使用 --depth 1
参数可以克隆仓库的最近一次提交
,这样可以减少克隆所需的时间和空间。
git clone --depth 1 https://xxxx/xxxx/xxxx.git
通过 -b <指定分支名> --single-branch
可以获取远程仓库的某一个指定分支
git clone -b <指定分支名> --single-branch https://xxxx/xxxx/xxxx.git
也可以将 -b <指定分支名> --single-branch --depth 1
结合使用克隆指定分支的最新一次提交
git clone -b <指定分支名> --single-branch --depth 1 https://xxxx/xxxx/xxxx.git
本文 Git 命令汇总
命令 | 描述 |
---|---|
git config --global user.name "User Name" | 初始化配置用户名 |
git config --global user.email "email...com" | 初始化配置邮箱 |
git init | 初始化 Git 仓库 |
git add -A git add -. git add -* | 将工作区所有文件添加到暂存区 |
git commit -m "日志" | 将暂存区的所有文件提交到版本区 |
git status git status -s | 查看当前仓库的状态 |
git rm --cached <文件名> | 撤销暂存区指定 文件 |
git rm --cached -r . | 撤销暂存区所有 文件 |
git diff | 差异对比 工作区 和暂存区 |
git diff --cached | 差异对比 版本区 和暂存区 |
git log git log --oneline git reflog* | 查看当前分支的版本提交记录 |
git reset --hard [版本号] | 版本回退 |
git branch | 查看当前有哪些分支 / 创建一个分支 |
git checkout <分支名> | 切换到指定的分支 |
git merge <要与其合并的分支名> | 将指定的分支与当前所在的分支做合并 |
git branch -d <分支名> | 删除指定的分支 |
git rebase <要将当前分支变基到的目标分支名> | 分支变基 |
git tag 标签名 版本号 | 给指定提交打 轻量标签 |
git tag -a 标签名 版本号 -m "标签描述" | 给指定提交打 附注标签 |
git tag | 查看标签 |
git show 标签名 | 查看标签信息 |
git tag -d 标签名 | 删除标签 |
git checkout <提交版本号> | 签出一个临时的游离分支 |
git remote add <远程仓库别名> <远程仓库地址> | 将本地仓库关联到一个远程仓库 |
git remote -v | 查看所关联远程仓库 |
git remote set-url | 更改远程仓库 |
git remote remove <远程仓库别名> | 删除远程仓库 |
git push -u origin master | 将本地仓库分支推送到远程仓库分支 |
git pull | 拉取远程仓库分支 |
git clone | 克隆远程仓库 |
🚵♂️ 博主座右铭:向阳而生,我还在路上!
——————————————————————————————
🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!
——————————————————————————————
🤼♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】
——————————————————————————————