这个教程我称之为简明教程,简而言之,就是我们只聊常用的,基础的操作,对于高深的原理,复杂的命令,我们不去讲。系统通过这个简单的教程能帮助你了解 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 会稍微复杂一些,你需要访问 这个网址,然后点击 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 commit
或git add
状态,也就是说,如果这个文件还没有提交到暂存,那么这个文件的修改将清空,如果这个文件已提交到暂存,那么这个文件将撤回到提交状态,也就是没有作用。
修改已提交到仓库的文件
如果一个文件提交到了仓库,这个时候有发现这个文件有一些问题,我们需要撤回修改。这种情况之下修改会有一些麻烦。首先我们了解并执行一下步骤:
-
需要修改的是哪一次提交?
-
改提交所对应的版本号(commit Id)是多少?
-
进入需要修改的提交
-
修改文件
-
重新提交
# 查看提交版本历史
git log
# 重置到需要修改的版本
git reset --hard 2bcef5a
# 修改文件
# 提交修改
TIPS
-
在 Git 中,
HEAD
表示当前版本,如果要修改版本是上一个版本,那就是HEAD^
,上上个版本就是HEAD^^
,上 100 个版本就是。。。写起来就比较累了,我们可以用HEAD~100
表示。 -
git log
可以查看提交历史,如果我们要回到未来的版本,那么我们可以用git reflog
查看命令历史,以便确定要回到未来的哪个版本?
远程仓库
当目前为止,我们已经学习并掌握了如何对文件进行管理。Git 作为一个分布式版本管理系统,能做的如果只是在本地玩玩,那岂不是太没有意思了,而且一旦磁盘坏掉,所有的文件都没有了。所以如果有一台电脑每天 24 小时开机,用来存储我们的代码,那是不是就好多了呢。幸好,这世界上个网站叫,这个网站是全世界最大的代码托管平台。你只需要注册一个,然后就可以使用 Git 远程仓库了。 除了 Github 之外一些其他的代码托管平台,比如,等等。要关联远程仓库大体都有以下几个步骤:
-
验证密钥
-
提交文件
验证密钥:这里有两种方式,一种是验证用户名和密码,这种方式比较不好用,因为每一次都需要输入用户名和密码,显得非常麻烦。另一种就是验证密钥,即文件传输通过 SSH 加密,因此需要完成以下几个步骤:
-
创建 SSH Key。首先你需要确认在你电脑用户文件夹下的
.ssh
中是否有id_rsa
和id_rsa.pub
这两个文件,其中前面的文件是私钥,后面的文件是私钥。如果没有则在终端中执行ssh-keygen -t rsa -C "YourEmail@example.com"
-
登入到远程仓库的设置页面,添加 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
END
到这里这篇文章就结束了,如果对你有所帮助,或者有不明白的地方,欢迎留言。
[riplus-alerts bg_color="#cce5ff" font_color="#81d742"]回复可查看文章相关视频。[/riplus-alerts]
评论(1)
回复可查看本人发布的视频版 Git 简明教程。