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 init
初始化命令 会生成一个 .git
文件夹,这样就成功的初始化了一个本地仓库
,而此时根目录下的文件就处于工作区
git init
git add [file]
,可以指定将某个指定文件提交到暂存区
,同时也可以执行以下三种命令之一,将工作区的所有文件
都提交到暂存区
git add -A
git 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 >
在 Git 中,标签(Tag)是用来指向特定提交的引用,通常用于
标记项目中的重要点
,比如版本发布。标签分为两种类型:
轻量标签只是
简单地指向描述一个提交
,不包含其他信息,创建轻量标签不会存储任何额外的信息。
附注标签存储了
额外的信息
,例如:标签名、标签信息、创建者名字、电子邮件、创建日期
等。因为它们包含了更多的信息,附注标签更适用于公共或正式发布
的场合,比如软件版本的发布。
创建标签
命令 | 描述 |
---|---|
git tag 标签名 版本号 | 给指定提交打 轻量标签 |
git tag -a 标签名 版本号 -m "标签描述" | 给指定提交打 附注标签 |
git tag | 查看标签 |
git show 标签名 | 查看标签信息 |
git tag -d 标签名 | 删除标签 |
git checkout
也可以将代码签出到指定版本
,即可以执行git checkout 具体版本号
,当签出到指定提交版本
时,签出的代码出于一个临时的游离分支中,如下图操作
值得注意:
(重要
)
在游离分支上也可以对代码进行版本控制,但要特别注意:一旦从游离分支切走
,游离分支的提交不会交给任何一个分支
,因为它是临时
的,所以对于游离分支我们的使用原则是:
修改游离分支的代码
(只是看一看某个版本的代码)reflog
寻找游离分支的提交
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
git remote set-url origin
新的仓库URLgit 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 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 | 克隆远程仓库 |
🚵♂️ 博主座右铭:向阳而生,我还在路上!
——————————————————————————————
🚴博主想说:将持续性为社区输出自己的资源,同时也见证自己的进步!
——————————————————————————————
🤼♂️ 如果都看到这了,博主希望留下你的足迹!【📂收藏!👍点赞!✍️评论!】
——————————————————————————————