Git 是什么?
Git 是目前世界上最先进的分布式版本控制系统。并且它是一个免费的、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
什么是版本控制系统
版本控制是一种系统,它跟踪一段时间内对文件或文件集合的修改,以便以后可以恢复不同的副本。如果开发人员在他的代码的新版本中有一些错误,他可以切换回以前的(旧的)版本。
当多个开发人员处理单个项目时,单个开发人员所做的更改可能会影响另一个开发人员的代码。因此,为了解决所有这些问题,git有分支,每个开发人员都在一个单独的分支上工作,使用他们的代码并测试他们的代码,最后,他们可以合并所有的分支。太棒了😎
为啥要学习 Git?
- 面试要被问,可以应付面试。
- 很多公司开发都用Git来处理项目。现在不学,以后肯定还要学。
- 在我看来Git是现如今所有程序员都要掌握的,以后与同事共同协作开发项目必定要用到的,熟练掌握Git命令,可以提高开发的效率。
Git 优势
- 分布式开发
- 变更记录
- 快速开发
- 源代码备份,在新代码失败时用于恢复旧版本的代码
- 单个项目的单个特性
- 对代码的每次更改都要隔离环境
- git在我们的本地机器上脱机工作
如何安装 Git ?
Git 支持常见的平台,如Windows、Linux、mac os三大系统环境。
在Linux (ubuntu)系统环境中安装git
在安装git之前先更新Linux系统,代码如下:
apt-get update
现在,您可以安装git,代码如下:
apt-get install git-core
安装完成后,可以通过git命令检测版本号,代码如下:
git --version
在Windows系统环境中安装git
查看Git官方网站:git-scm.com/downloads
点击红框里面的下载按钮,并允许下载完成。
它会根据你的电脑开始下载,可能是32位,也可能是64位。下载后解压它并安装到您的本地机器上。
创建 Git 仓库
有两种创建仓库的方式:
❌ Cloning(单独的主题克隆)
❌ Git 命令
即将克隆一个主题,现在,让我们使用Git命令。创建一个仓库,我们可以使用git init命令在我们的项目目录中初始化一个空的git仓库,它将创建一个.git文件。具有标记、对象和模板文件等配置。
- 创建项目目录
- 转到项目文件夹
- Git init 命令
在初始化git仓库之后,用户就可以处理文件并将其推到像GitHub这样的远程仓库。
Git 修改
这是git中重要的特性之一,我们可以在执行提交之前跟踪文件或项目中任何内容的更改。
命令检测状态
git status
新仓库的状态
修改后的仓库状态
我已经在项目目录中创建了一个新文件index.html
提交后的仓库状态
git add .
git commit -m “(自定义提交信息)”
git status
Git 克隆(clone)
Git clone 命令从GitHub克隆一个远程目录,并在本地机器上创建一个新目录。
只有公开的仓库可以克隆
浅克隆允许克隆用户所需的指定提交数量。
Git 暂存区域
这是提交之前的一个阶段。在这个阶段,我们可以创建部分提交、编辑文件或修改文件。准备提交的过程称为准备区域。
git add .
上面的命令用于将任何修改过的和新创建的文件更新到暂存区域,删除的文件不用于暂存区域。
git add -u
上面的命令用于将任何修改和删除的文件更新到暂存区域,新创建的文件不用于暂存区域。
git add -A
上面的命令用于将任何类型的修改、删除和新创建的文件更新到暂存区域。
Git 删除文件
如果用户需要删除不必要的文件,用户可以从工作树中删除该文件,这将停止跟踪该文件的更改。
git rm --cached filename.txt 命令仅从仓库中删除文件,而cmd命令行上的文件将同时删除文件系统和索引。
这个cmd命令行将帮助用户删除/移除唯一指定的扩展文件集,例如扩展名为(.py)的文件。
用户可以从仓库的以前历史记录中恢复已删除的文件。
Git 忽略(ignore)
.gitignore文件用于排除暂存区域和git提交中要排除的文件、文件夹和文件扩展名类型。
例如,在node.js项目中,用户会忽略node_modules文件夹,因为它包含了很多外部包/模块。甚至由于IDE的扩展而自动创建的垃圾文件。
打开git忽略文件
注意,文件名是.gitignore,并且只在项目的根目录中创建。
linux / mac 下在命令行创建/删除 .gitignore 文件命令如下:
touch .gitignore # 新建
rm -f .gitignore # 删除
windows 系统 win10 以前的版本可能无法直接用视图菜单创建/删除以 . 号开头的文件,需要在命令行操作:
// 创建
type nul>.gitignore
// 删除
del /F .gitignore
Git 标签(tag)
标签用于标记代码。标签就像git中的书签,指向一个特定的提交。我们甚至可以说标记是您的代码v1、v2、v2.2的版本,创建标记需要一个参数:标签的名称。
标签有两种类型
- 注释标签
- 轻量标签
注释标签
注释标签公开发布项目时非常有用,注释标签包含标签等元数据信息,时间戳、作者名称、版本说明,等等。这些对于公开发布您的项目非常有用,因为游客或其他未知的用户都能够知道的实际细节和时间戳标记,注释标签总是指向一个标签对象在git对象数据库。
在cmd命令行创建一个带注释的标签,代码如下:
git tag -a <tag name>
它在当前分支上创建一个本地标签,但是当您将最新的代码提交,并推送到远程仓库时,git不推标签,用户需要通过命令单独推标签。
轻量标签
轻量级标签是简单的标签,将主要用于本地,创建轻量级标签只是不提供任何额外的参数,如-m, a。轻量级标记只是一个指向提交的命名指针。
在命令行创建轻量级标签
git tag <tag name>
在命令行推送标签
git push origin --tags
**如何给自己贴上专业标签?**😎
我们的v1标签一开始似乎是个不错的选择,但在将来我们会看到v2、v3、v4等等。同时,一些bug也会出现,所以我们会得到v4修复,或者可能是v4.1。在某些时候,坚持做某事是很困难的。🤦♂️
语义版本化可以解决这个问题。这是一个流行的标准,使用了一些简单的规则。每个版本的格式为主、小、补丁,每个部分将根据下面的规则进行更改。
- 主要(MAJOR):当破坏向后兼容性时
- 次要(MINOR):当添加一个不会破坏兼容性的新特性时
- 补丁(PATCH):在不破坏兼容性的情况下修复bug
注意:标签不能以/开始或结束。不能在标签内使用字符^、*或:
Git 分支(branch)
当用户创建他们的第一个回购时,默认情况下主分支将是主分支。
分支就像同一项目中的独立开发线。
例如,您正在为您的应用程序开发一个新特性或更新,但是这不应该崩溃您的主repo(Master)。因此,您可以为新代码的那一部分创建另一个分支。一旦您确认它不会影响主代码,您就可以合并主分支和新分支。
如何在Git中查看分支🤔
我们可以通过 git branch 参数来检查合并、未合并和本地分支。
当前分支在git输出的名称前有一个带*(星号)。
如何在Git中合并分支🤔
正如我上面所说的,你可以将你所有的分支合并到主分支中。
Git 反做(revert)
git revert 是用于反做
某一个版本,以达到撤销该版本的修改目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。如下图所示:
如果我们想撤销之前的某一版本,但是又想保留该目标版本后面的版本,记录下这整个版本变动流程,就可以用这种方法。
git revert 是用一次新的commit来回滚之前的commit,此次提交之前的commit都会被保留。
查看版本号
git log
使用反做命令,再使用提交命令
// 反做
git revert -n 版本号
// 提交
git commit -m 版本名
使用推送命令
// 推送远程仓库
git push
Git 回退(reset)
git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,如下图所示,假设我们要回退到版本一:
如果想恢复到之前某个提交的版本,且那个版本之后提交的版本我们都不要了,就可以用这种方法。
查看版本号
git log
使用以下命令将版本回退
git reset --hard 目标版本号
使用推送命令提交更改
git push -f // 强制推送
Git 重新绑定(rebase)
重新绑定完全不同于合并。
Rebase命令将所有指定的分支提交添加到当前最高的分支(*)提交,这些新的提交将被添加到当前的分支,这将是类似于前一个分支的顺序。在重新建立基础之后,新的提交id将被更改。
Git 挑选(cherry-pick)
Cherry-pick 允许将提交从一个分支移动到另一个分支。Cherry-picking
就是以可持续的方式重新安排承诺的顺序。它在当前提交(HEAD)之后使用不同的提交id创建新的提交。
参考资料
- COMPLETE GIT (VERSION CONTROL SYSTEM)
- Git恢复之前版本的两种方法reset、revert(图文详解)
- git版本控制系统教程
- Git 笔记 - 程序员都要掌握的 Git
❤️ 爱心三连击
1.如果觉得这篇文章还不错,来个分享、点赞、在看三连吧,让更多的人也看到~
2.关注公众号【懒人码农】,定期为你推送前端精选优质好文。
3.如有前端技术问题,请加微信好友【lazycode520】,小编拉您进前端实践技术交流群。🤗