「图文详解」完整的git操作手册~开发者必备

3,610 阅读10分钟

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创建新的提交。

参考资料

❤️ 爱心三连击

1.如果觉得这篇文章还不错,来个分享、点赞、在看三连吧,让更多的人也看到~

2.关注公众号【懒人码农】,定期为你推送前端精选优质好文。

3.如有前端技术问题,请加微信好友【lazycode520】,小编拉您进前端实践技术交流群。🤗