这个教程我称之为简明教程,简而言之,就是我们只聊常用的,基础的操作,对于高深的原理,复杂的命令,我们不去讲。系统通过这个简单的教程能帮助你了解 Git 的基本操作。

 

[riplus-reply-hide]

https://www.bilibili.com/video/BV1a7411K7iq/

[/riplus-reply-hide]

 

安装 Git

要使用 Git,我们首先必须要安装好 Git。最早 Git 只能在 Linux 和 Unix 系统上运行,不过现在已经可以运行在 Linux,Unix,Mac,Windows 这几大平台上运行了。这里我们讲一下如何在 Linux,Mac,Windows 上安装。

Linux 安装 Git

由于 Linux 有非常多的分支,我这里也不好一个一个去讲,因此我们来说一下使用频率最高的 Debian 系 Linux 下如何安装 Git。你只需要执行命令 sudo apt install git,然后回车输入密码再回车就好了。

Mac 安装 Git

在 Mac 下安装和 Linux 一样简单,前提是你系统上要安装好了 homebrew,之后执行 brew install git 即可。

Windows 安装 Git

相对来说在 Windows 下安装 Git 会稍微复杂一些,你需要访问 https://git-scm.com/downloads 这个网址,然后点击 Windows,稍等一下就会自动下载了,下载完了之后,直接双击默认安装就好了。

确认安装成功

前面说过如何去安装,安装了之后我们还需要去确定一下能不能去执行 git 命令。因此我们打开一个终端「Windows 下打开 cmd, powershell 或者 Git Bash」,然后在终端中输入git 回车,如果如下显示,则表示安装成功。为了更加愉快的使用 Git,我们还需要做最后一步设置,打开终端并输入以下命令:

 git config --global user.name "Your name"
 git config --global user.email "email@example.com"

初始化仓库

首先要明白一个概念,什么是仓库,仓库也叫版本库,英文名 repository,你可以理解为一个目录,在这个目录中的所有文件的修改,删除,Git 都可以追踪。要初始化一个仓库,我们需要执行一下命令。

 # Make Dir / 创建一个目录并进入 testgit
 git init

这样就初始化了一个仓库,细心的你一定已经发现在当前目录下多了一个.git目录,这个可以说就是仓库了,是 Git 用来跟踪管理仓库。注意,千万不要闲着无聊改这个目录中的内容,否则后果自负哦,吼吼吼~~

版本管理

到这里我们已经学了几个简单的命令,但还不够,完全发挥不出 Git 的真正实力,我们要讲的内容才是刚刚开始。

将文件添加到仓库中

首先在刚才新建的文件夹中新建 readme.md,输入以下内容:

 Git 是一个**版本控制系统**  
 Git 是一个**免费**的软件

写完之后我们保存这个文件。现在文件已经有了,我们就需要将这个文件放入到 Git 仓库中,那如何操作了,首先我们打开终端并进入testgit这个目录,接着输入 git add readme.md,这个命令的意思是将readme.md这个文件添加到暂存区中,命令输完之后,没有任何显示,那我们可以使用 git status 这个命令查看一下当前仓库的状态,事实上,没有任何反馈就是好消息,证明我们的命令已经正确的执行了。

 On branch master
 
 No commits yet
 
 Changes to be committed:
   (use "git rm --cached <file>..." to unstage)
 
         new file:   readme.md

然后我们使用git commit这个命令将文件提交到仓库。

 $ git commit -m "新增 readme.md 文件"
 [master (root-commit) 0c92d8c] 新增 readme.md 文件
  1 file changed, 2 insertions(+)
  create mode 100644 readme.md

解释一下刚才执行命令的含义。-m 后面输入的是本次提交的说明,每一次向仓库提交文件都必须提供说明。即使可以不提交,这里我也希望你一定要提交说明信息。

修改未提交到暂存区的文件

在 Git 中,文件总共有三种状态,在工作区中,此时我们还没有提交到暂存中。在暂存中,文件已经提交到暂存中,但还没有进入仓库。在仓库中,文件已提交到仓库中。如果当前用户并没有将文件提交到暂存区,如果发现错误,或者新增内容,我们直接打开文件编辑就可以了。

修改已提交到暂存区的文件

如果一个文件已经提交到了暂存中,但是突然之间,我们发现在文件的最后一行写了一句「老板真是一个傻逼」,这句话一旦提交上去了,很可能工作就没有了,想到还有房贷,车贷的你,只想拼命撤回并删除这句话。这个时候下面这个命令还可以救你一命。

 $ git reset HEAD readme.md
 # 这个命令的意思是从暂存中撤销readme.md这个文件的修改。

另一个情景重新,依然是在文件的最后一行加了「老板真是一个傻逼!!」,你发现的时候已经有好几个文件都只在最后一行添加了这句话,但是还没有提交到暂存区,这时候你有几个选择,第一个是直接打开文件然后删除,第二个是执行git checkout -- <FILE>。请格外注意这个命令中的--这两个横杠非常重要,否则就变成切换分支了。这个命令还有一个要注意的地方是,执行这个命令是将文件撤回到最后一次git commitgit add状态,也就是说,如果这个文件还没有提交到暂存,那么这个文件的修改将清空,如果这个文件已提交到暂存,那么这个文件将撤回到提交状态,也就是没有作用。

修改已提交到仓库的文件

如果一个文件提交到了仓库,这个时候有发现这个文件有一些问题,我们需要撤回修改。这种情况之下修改会有一些麻烦。首先我们了解并执行一下步骤:

  • 需要修改的是哪一次提交?

  • 改提交所对应的版本号(commit Id)是多少?

  • 进入需要修改的提交

  • 修改文件

  • 重新提交

 # 查看提交版本历史
 git log
 # 重置到需要修改的版本
 git reset --hard 2bcef5a
 # 修改文件
 # 提交修改

TIPS

  • 在 Git 中,HEAD表示当前版本,如果要修改版本是上一个版本,那就是HEAD^,上上个版本就是HEAD^^,上 100 个版本就是。。。写起来就比较累了,我们可以用HEAD~100表示。

  • git log可以查看提交历史,如果我们要回到未来的版本,那么我们可以用git reflog查看命令历史,以便确定要回到未来的哪个版本?

远程仓库

当目前为止,我们已经学习并掌握了如何对文件进行管理。Git 作为一个分布式版本管理系统,能做的如果只是在本地玩玩,那岂不是太没有意思了,而且一旦磁盘坏掉,所有的文件都没有了。所以如果有一台电脑每天 24 小时开机,用来存储我们的代码,那是不是就好多了呢。幸好,这世界上个网站叫github,这个网站是全世界最大的代码托管平台。你只需要注册一个,然后就可以使用 Git 远程仓库了。 除了 Github 之外一些其他的代码托管平台,比如码云阿里云等等。要关联远程仓库大体都有以下几个步骤:

  • 验证密钥

  • 提交文件

验证密钥:这里有两种方式,一种是验证用户名和密码,这种方式比较不好用,因为每一次都需要输入用户名和密码,显得非常麻烦。另一种就是验证密钥,即文件传输通过 SSH 加密,因此需要完成以下几个步骤:

  1. 创建 SSH Key。首先你需要确认在你电脑用户文件夹下的.ssh中是否有id_rsaid_rsa.pub这两个文件,其中前面的文件是私钥,后面的文件是私钥。如果没有则在终端中执行ssh-keygen -t rsa -C "YourEmail@example.com"

  2. 登入到远程仓库的设置页面,添加 SSH Key,然后粘贴id_rsa.pub文件中的内容。

添加远程仓库

首先我们要在远程仓库中新建一个,要完成这步,我们先登录 Github,然后点击右上角的加号=>New repository,然后依次填入项目信息,最后点击“Create repository”。

 # 添加远程仓库
 $ git remote add origin git@github.com:<username>/<repo_name>.git
 # 将本地库推送到远程库中
 $ git push -u origin master
 # -u 参数,不但会将本地的 master 分支推送到远程的 master 分支上,还会将两者管理起来,这样之后我们就可以简化命令了。

从远程仓库克隆

前面介绍的是已经在本地创建好项目之后,我们关联远程项目,另外一种方式是,我们在远程仓库创建好仓库之后克隆到本地。那么这种情况下,我们要按照下面所示的命令操作:

 $ git clone git@github.com:<username>/<repo_name>.git
 # git clone 可以将远程仓库克隆到本地。

分支管理

在真实的项目工作中,我们往往需要多人协作,这时参加多人协作的人员之间就需要一个规范,否则所有代码都直接提交到 master 主分支,备注信息完全按照自己的喜好去填写,那么这个项目就离混乱不远了,指不定就没法维护了。因此我们需要一套完整的规范以及工作流程,这里介绍其中的一种叫 git flow。在新版的 git 安装包中已经包含了这个命令。但在开始介绍之前,我们要先了解以下如何在 Git 中创建,合并,删除分支。

 # 查看分支
 git branch
 
 # 创建分支
 git branch <name>
 
 # 切换分支,以下两个命令都可以。
 git checkout <name>
 git switch <name>
 
 # 创建并切换到新分支中
 git checkout -b <name>
 git switch -c <name>
 
 # 合并到当前分支
 git merge <name>
 
 # 删除分支
 git branch -d <name>

看上面的命令似乎很简单,然而在合并分支的时候往往不是一帆风顺的,尤其在多人协作的项目中。这个问题是由于多人同时编辑过同一文件所照成。

合并分支

关于如何合并分支,在前面我们已经讲过了,这里我们来聊一下当我们合并分支时发生冲突怎么办?情景重现:

 # 新建分支
 git switch -c feature1
 
 # 我们将最后一行改成「Git 分支管理非常快速且方便」,并且将修改提交到仓库中。
 git switch master
 
 # 在这个分支中我们将最后一行改成「Git 分支管理非常快速而且很方便」,并且提交到仓库中
 # 合并 feature1 分支到 master 分支中。
 git merge feature1
 # Auto-merging readme.md
 # CONFLICT (content): Merge conflict in readme.md
 # Automatic merge failed; fix conflicts and then commit the result.
 
 # 可以看到发生冲突了,Git 要求我们修复冲突然后提交。
 # 我们打开 readme.md 文件将文件中的冲突信息删除掉,然后将最后一行改成「Git 分支管理非常快速且十分方便」
 # 之后我们就可以提交到仓库中了。
 
 # 最后我们删除不需要的分支
 git branch -d feature1

git flow 工作流

git flow 是一套用来管理复杂项目的工作流程,这套流程将整个项目分成若干个分支,具体如下

  • master - 主分支,这个分支上的代码是稳定的代码版本。

  • develop - 开发分支,主要的开发工作都在这个分支中完成,一旦开发完成则将代码合并的 release 分支上。

  • release - 发布分支,预发布分支,这个分支中的代码是比较稳定的,在经过足够多的测试及试用之后,发布版本,并且代码将会同时合并到 master 分支以及 develop 分支上,这样新功能的开发就会基于最新的代码了。

  • feature - 功能分支,当我们在开发的过程中,需要新增一个功能,或者特色的时候我们就在 feature 中创建一个功能分支,然后完成开发之后,将代码合并到 develop 分支中。

  • hotfix - 补丁分支,当我们发布版本之后,发现了一个新的 bug,这时我们需要修复这个问题,因此我们新建一个 hotfix 分支,修复完成之后,代码合并到 master 及 develop 分支中。

如上,大概是 git flow 工作流的工作过程及规范。需要了解更多可访问以下两个链接。

refs

  1. git flow 使用最强指北
  2. git flow 的工作流程

END

到这里这篇文章就结束了,如果对你有所帮助,或者有不明白的地方,欢迎留言。

[riplus-alerts bg_color="#cce5ff" font_color="#81d742"]回复可查看文章相关视频。[/riplus-alerts]

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。