原文地址:https://blog.dpf114.top/posts/git-often-used/html
单独的讲版本控制咱们或许不知道它是什么,可是举个咱们生活中的小例子,咱们很容易明白它是什么。java
例如咱们毕业修改无数遍的论文:git
毕业论文最终版 毕业论文最最终版 毕业论文最最最终版 毕业论文最最最最终版 毕业论文最终不改版 毕业论文最终真不改版 毕业论文最终真真不改版 毕业论文最终打死不改版 毕业论文最终打死不改版 2 ...
这里有不少版本,而版本控制系统就是对咱们写的内容不一样版本进行控制的系统。github
经常使用的版本控制系统有SVN
和Git
。咱们在实际开发中Git使用的比较多。shell
Windowssegmentfault
对于windows只要下载安装包直接安装便可。windows
Linux工具
使用apt-get工具下载安装gitlab
apt-get update sudo apt-get install git
Macpost
使用brew工具下载安装
brew install git
不论是 Windows 安装仍是 Linux 安装,安装好以后,咱们都先经过以下两行命令作一个基本配置,目的是为了区分不一样开发人员的身份,即每次提交都是由谁提交的。配置方式以下:
git config --global user.name 'username' git config --global user.email 'username@qq.com'
配置完成后配置信息存储在~/.gitconfig
文件中
在基本操做以前咱们要了解一下Git使用的分区
git add
提交后临时存放代码的地方git commit
提交后存放代码的地方,本地库保存着历史版本相关信息。初始化仓库有两种方式,一种是经过从远程仓库克隆,另一种是直接从当前目录初始化,命令以下:
git init
执行完成后当前目录下会多出一个 .git
的隐藏文件夹,全部 git
须要的数据和资源都存放在该目录中。
经过git status
命令能够查看仓库的状态。刚初始化的仓库查看状态以下:
修改工做区后查看状态以下图:
提交暂存区后查看状态以下图:
提交到本地仓库后查看状态以下图:
经过git add
能够将工做区的内容提交到暂存区,有如下几种使用状况:
git add 具体文件 git add . git add *
.
和*
都表明提交工做区的全部文件。
经过git commit
将暂存区内容提交到本地仓库,具体使用以下:
git commit -m '提交描述内容'
注意:描述内容不能为空。建议每次提交写清楚提交内容,可用于版本回退。
若是是经过克隆的方式初始化仓库,提交到本地库后,能够直接经过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
经常使用有如下两种方式:
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的做用是合并代码(后面分支管理有详细解析)
使用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
可能有一天你正在写代码,写了好久发现写错了,想恢复到一开始的状态,一个笨办法就是把刚刚写的代码一行一行的删除,不过这种方式成本过高,能够经过 git checkout -- <file>
命令来撤销工做区的代码修改。以下图:
想要撤销提交到暂存区的代码分如下两步:
git reset HEAD
git checkout -- file
基于索引版本回退(推荐使用)
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
--mixed
--hard
因为远程仓库与本地仓库内容一致,因此须要远程仓库版本回退只须要本地版本回退再提交到远程仓库便可。
咱们在完成一个项目时,不多是“单线程”开发的,不少时候任务是并行的。举个栗子:项目 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 中的分支管理功能:
咱们可使用命令git branch
来查看当前仓库有哪些分支和咱们当前所处的分支
前面带*
的分支为咱们当前所处分支。
第一种方法
git branch 分支名
建立分支git checkout 分支名
切换分支第二种方法
使用git checkout -b 分支名
建立和切换分支一步到位。
分支的整合有两种形式,一种是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的区别
rebase过程当中可能产生冲突,解决冲突后继续提交
git add .
git rebase --continue
如下是冲突部份内容
<<<<<<< HEAD 须要合并分支的内容 ======= 当前分支内容 >>>>>>>
咱们能够给某一个提交打上一个标签,以示重要。比较有表明性的打标签用它来发布对应的应用的版本好比v1.0、v2.0。Git支持两种标签:轻量标签(lightweight)与附注标签(annotated)。
咱们能够用如下命令查看仓库中全部标签:
git tag
轻量标签很像一个不会改变的分支——它只是某个特定提交的引用。轻量标签本质上是将提交校验和存储到一个文件中——没有保存任何其余信息。
轻量标签打标签格式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
附注标签是存储在仓库中一个完整对象,它有本身的校验和信息,其中包含标签者的名字、电子邮件、日期时间,此外还有一个标签信息。可使用 GNU Privacy Guard (GPG)
签名并验证。
打附注标签格式 git tag -a 标签名称 -m '标签信息'
,举例以下:
git tag -a v1.0 -m 'my version 1.0'
默认状况下,git push
命令并不会传送标签到远程仓库。须要咱们手动将标签推送到远程仓库,推送格式git push 远程分支别名 标签名
,举例:
git push origin v1.0
参考资料:
https://git-scm.com/book/zh/v2
https://www.runoob.com/git/git-tutorial.html