原文地址:https://blog.dpf114.top/posts/git-often-used/
1. 什么版本控制系统
独自的讲版本控制咱们或者不晓得它是什么,然而举个咱们生存中的小例子,咱们很容易明确它是什么。
例如咱们毕业批改无数遍的论文:
毕业论文最终版
毕业论文最最终版
毕业论文最最最终版
毕业论文最最最最终版
毕业论文最终不改版
毕业论文最终真不改版
毕业论文最终真真不改版
毕业论文最终打死不改版
毕业论文最终打死不改版 2
...
这里有很多版本,而版本控制系统就是对咱们写的内容不同版本进行管制的零碎。
罕用的版本控制系统有 SVN
和Git
。咱们在理论开发中 Git 应用的比拟多。
2. 装置和配置
2.1. 装置
Windows
对于 windows 只有下载安装包间接装置即可。
Linux
应用 apt-get 工具下载安装
apt-get update
sudo apt-get install git
Mac
应用 brew 工具下载安装
brew install git
2.2. 装置后配置
不论是 Windows 装置还是 Linux 装置,装置好之后,咱们都先通过如下两行命令做一个根本配置, 目标是为了辨别不同开发人员的身份,即每次提交都是由谁提交的。配置形式如下:
git config --global user.name 'username'
git config --global user.email 'username@qq.com'
配置实现后配置信息存储在 ~/.gitconfig
文件中
3. 根本应用
在基本操作之前咱们要理解一下 Git 应用的分区
- 工作区:工作区也就是咱们平时写代码的中央
- 暂存区:通过
git add
提交后长期寄存代码的中央 - 本地库:通过
git commit
提交后寄存代码的中央,本地库保留着历史版本相干信息。 - 近程库:近程库也就是近程代码仓库,例如 Gitee、GitHub、gitlab。
3.1. 初始化仓库
初始化仓库有两种形式,一种是通过从近程仓库克隆,另外一种是间接从当前目录初始化,命令如下:
git init
执行实现后当前目录下会多出一个 .git
的暗藏文件夹,所有 git
须要的数据和资源都寄存在该目录中。
3.2. 查看仓库状态
通过 git status
命令能够查看仓库的状态。刚初始化的仓库查看状态如下:
批改工作区后查看状态如下图:
提交暂存区后查看状态如下图:
提交到本地仓库后查看状态如下图:
3.3. 提交到暂存区
通过 git add
能够将工作区的内容提交到暂存区,有以下几种应用状况:
git add 具体文件
git add .
git add *
.
和 *
都代表提交工作区的所有文件。
3.4. 提交到本地库
通过 git commit
将暂存区内容提交到本地仓库,具体应用如下:
git commit -m '提交形容内容'
留神:形容内容不能为空。倡议每次提交写分明提交内容,可用于版本回退。
3.5. 提交到近程仓库
如果是通过克隆的形式初始化仓库,提交到本地库后,能够间接通过 git push
间接提交到近程仓库,如果是通过 git init
初始化,须要近程近程创立好对应仓库后,让本地仓库跟近程仓库关联,让后再用 git push
提交。
关联近程仓库
用 git remote
命令关联近程仓库,格局git remote add 别名 近程仓库 url
, 举例如下
git remote add origin https://github.com/xiaoxiaoshou/testgit.git
这里的 url 你可能两种类型,别离为 https://github.com/username/reponame.git
和git@github.com:username/reponame.github.io.git
, 代表着 git 两种不同的连贯形式。
其余关联近程仓库相干命令:
# 查看关联了哪些近程分支
git remote -v
# 删除关联分支
git remote remove 别名
提交到近程仓库
提交命令格局git push 别名 分支名
,举例如下:
git push origin master
3.6. 从近程拉取代码
罕用有以下两种形式:
1. 应用 git clone
默认从近程 master 分支拉取:
git clone 近程 url 地址
指定分支拉取:
git clone -b 分支名称 近程 url 地址
应用 git pull
应用格局git pull < 近程主机名 > < 近程分支名 >:< 本地分支名 >
。
例如咱们要将近程 origin 的 master 分支拉取过去,与本地的 master 分支合并
git pull origin master:master
咱们也能够简化为
git pull origin master
git pull origin
git pull
git pull = git fetch+git merge
,fetch 的作用是从近程拉取代码,merge 的作用是合并代码(前面分支治理有具体解析)
4. 代码撤销与版本回退
4.1. 查看提交记录
应用 git log
能够查看提交过的信息,每次提交(git commit
)到本地仓库的详细信息,每条提交信息大抵如下:
commit cdc2ac8c3b6d9f8bde05140aca484aa4482f8895
Author: xiaoxiaoshou <446933040@qq.com>
Date: Tue Dec 1 15:41:13 2020 +0800
提交形容内容
commit 前面的编号是每次提交的一个索引(咱们能够叫它版本号),用于版本后退或后退
应用 git log
显示的内容过多,咱们个别应用上面两个比拟简洁的查看形式:
# 举荐应用
git reflog
git log --online
4.2. 工作区代码撤销
可能有一天你正在写代码,写了很久发现写错了,想复原到一开始的状态,一个笨办法就是把刚刚写的代码一行一行的删除,不过这种形式老本太高,能够通过 git checkout -- <file>
命令来撤销工作区的代码批改。如下图:
4.3. 增加到暂存区代码撤销
想要撤销提交到暂存区的代码分以下两步:
- 1. 将暂存区代码撤销到工作区
git reset HEAD
- 2. 将工作区代码撤销(和工作区代码撤销一样)
git checkout -- file
4.4. 提交到本地仓库代码版本回退
基于索引版本回退(举荐应用)
1. 查看提交历史
2. 应用 git reset --hard [部分索引值]
回退(可后退和后退)
应用 ^ 符号
git reset --hard^
一个
^
回退一步
应用~ 符号
git reset --hard~n
n 代表后退步数
git reset 中三个参数比拟
git reset --soft
git reset --mixed
git reset --hard
-
–soft
- 仅仅在本地库挪动 HEAD 指针
-
–mixed
- 在本地仓库挪动 HEAD 指针
- 重置暂存区
-
–hard
- 在本地库挪动 HEAD 指针
- 重置暂存区
- 重置工作区
4.5. 提交到近程仓库版本回退
因为近程仓库与本地仓库内容统一,所以须要近程仓库版本回退只须要本地版本回退再提交到近程仓库即可。
5. 分支治理
5.1. 什么是分支
咱们在实现一个我的项目时,不可能是“单线程”开发的,很多时候工作是并行的。举个栗子:我的项目 2.0 版本上线了,当初要着手开发 3.0 版本,同时 2.0 版本可能还有一些 bug 须要修复,这些 bug 修复之后咱们可能还会发 2.1,2.2,2.3 这些版本,咱们不可能等所有 bug 都修复完了再去开发 3.0 版本,修复 2.0 的 bug 和开发 3.0 的新性能是两个并行的工作,这个时候咱们 3.0 的性能开发间接在 master 分支上进行必定不适合,咱们要保障有一个稳固,能够随时发版本的分支存在(个别状况下这个角色由 master 分支来表演),此时咱们就能够灵便的应用 Git 中的分支治理性能:
- 创立一个长期分支用来开发 3.0 性能,假如这个分支的名字就叫 v3,咱们在 v3 上增加新性能,并一直测试,当 v3 稳固后,将 v3 合并到 master 分支上。
- 创立一个个性分支用来修复 2.0 的 bug,一旦 bug 修复胜利,就将该分支合并到 master 上,一旦发现新 bug,就立马再创立分支进行修复,修复胜利之后再合并。
5.2. 查看分支
咱们能够应用命令 git branch
来查看以后仓库有哪些分支和咱们以后所处的分支
后面带 *
的分支为咱们以后所处分支。
5.3. 创立并切换分支
第一种办法
- 先用
git branch 分支名
创立分支 - 而后再用
git checkout 分支名
切换分支
第二种办法
应用 git checkout -b 分支名
创立和切换分支一步到位。
5.4. 整合分支
分支的整合有两种模式,一种是merge
, 另外一种是rebase
merge
应用命令 git merge [有新内容的分支名]
合并分支。
上图解释:主分支在 m1 时发现有 bug,于是切出一个分支 bugFix,通过一段时间,主分支开发到 m3,bugFix 分支(已提交为 m2)bug 曾经解决,这时候须要将 bugFix 分支合到主分支即应用命令git merge bugFix
。
rebase
rebase 又叫变基,应用命令 git rebase [有新内容的分支]
能够变基。
[外链图片转存失败, 源站可能有防盗链机制, 倡议将图片保留下来间接上传(img-asHdOBrc-1607004130806)(/Users/dpf/Library/Application Support/typora-user-images/image-20201202213338236.png)]
上图解析:上图是在主分支应用命令 git rebase bugFix
进行整合分支,整合过程是将 bugFix 的提交记录在主分支自底向上再提交一遍。
merge 和 rebase 的区别
- merge 是把以后分支和要合并的分支合并在一起,进行一次 commit 提交
- rebase 是把要 rebase 分支的历史提交在以后分支按程序从新提交,rebase 之后 HEAD 的地位不变(也就是图中的 *)
-
rebase 过程中可能产生抵触,解决抵触后持续提交
- 解决抵触
- 提交到缓冲区
git add .
- 持续实现合并
git rebase --continue
以下是抵触局部内容
<<<<<<< HEAD 须要合并分支的内容 ======= 以后分支内容 >>>>>>>
6. 标签治理
咱们能够给某一个提交打上一个标签,以示重要。比拟有代表性的打标签用它来公布对应的利用的版本比方 v1.0、v2.0。Git 反对两种标签:轻量标签(lightweight)与附注标签(annotated)。
咱们能够用以下命令查看仓库中所有标签:
git tag
6.1. 轻量标签
轻量标签很像一个不会扭转的分支——它只是某个特定提交的援用。轻量标签实质上是将提交校验和存储到一个文件中——没有保留任何其余信息。
轻量标签打标签格局git tag 标签名称
,举例如下:
git tag v0.0
轻量标签默认是对最新的 commit
进行。
咱们也能够对指定 commit
进行打标签,格局git tag 标签名称 commi 对应索引
。举例如下
# 查看 commit 索引
git reflog
# 打标签
git tag v0.01 bcde256
咱们也能够删除掉本地仓库上的标签,格局git tag -d 标签名称
,举例:
git tag -d v0.01
6.2. 附注标签
附注标签是存储在仓库中一个残缺对象,它有本人的校验和信息,其中蕴含标签者的名字、电子邮件、日期工夫,此外还有一个标签信息。能够应用 GNU Privacy Guard(GPG)
签名并验证。
打附注标签格局 git tag -a 标签名称 -m '标签信息'
, 举例如下:
git tag -a v1.0 -m 'my version 1.0'
6.3. 将标签推送到近程仓库
默认状况下,git push
命令并不会传送标签到近程仓库。须要咱们手动将标签推送到近程仓库,推送格局git push 近程分支别名 标签名
,举例:
git push origin v1.0
参考资料:
https://git-scm.com/book/zh/v2
https://www.runoob.com/git/git-tutorial.html
https://segmentfault.com/a/1190000037465780
边学习边玩会游戏:https://learngitbranching.js.org/?locale=zh_CN