文章目录
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 -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 reset --hard
命令进行版本之间的切换回滚
git reset --hard [版本号]
值得注意
使用 git reset --hard
切换版本后会有以下操作:
- 切换
版本区 HEAD
指针指向 - 还原
暂存区
到对应版本 - 还原
工作区
到对应版本
所以在执行 git reset --hard
切换版本之前 ,需要通过git add
或 git commit
清空当前工作区
以及暂存区
之后再进行版本切换
--soft
:重置HEAD
到指定提交,所有的更改都会自动添加到暂存区,对工作区无影响--mixed
: (默认值):重置HEAD到指定的提交,并且重置暂存区,对工作区无影响--hard
: 重置HEAD
到指定的提交,并且重置暂存区,重置工作区
修改提交日志
命令:git commit --amend
- 命令可以
重新编辑最近一次的版本
提交日志 - 将新的更改
合并
到最近一次的提交中
分支
概念:
创建分支与切换分支
- 在创建分支之前,我们可以使用命令
git branch
来查看当前仓库下存在哪些分支,初始默认情况下,我们的默认主分支为master
或main
,这时候我们使用git branch <分支名>
,就可以成功创建一个分支了。
值得注意
:
所以:当衍生分支
创建后,提交记录并不是空的,依然保留继承着截止创建衍生分支
时,主分支
当前最新的提交记录。所继承主分支最新提交的这次版本记录,被称为基点
- 创建分支后,可以使用
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 【标签】
- 轻量标签(Lightweight)
- 附注标签(Annotated)
创建标签
命令 | 描述 |
---|---|
git tag 标签名 版本号 | 给指定提交打 轻量标签 |
git tag -a 标签名 版本号 -m "标签描述" | 给指定提交打 附注标签 |
git tag | 查看标签 |
git show 标签名 | 查看标签信息 |
git tag -d 标签名 | 删除标签 |
游离分支
值得注意:
(重要
)
在游离分支上也可以对代码进行版本控制,但要特别注意:一旦从游离分支切走
,游离分支的提交不会交给任何一个分支
,因为它是临时
的,所以对于游离分支我们的使用原则是:
- 要尽量避免
修改游离分支的代码
(只是看一看某个版本的代码) - 若确实需要修改游离分支代码,应该从当前游离分支,创建出一个新的分支,随后去修改
- 若修在游离分支上发生了提交,随后从游离分支切走了,就要使用
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
- 更改远程仓库的 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 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 | 克隆远程仓库 |