Git 快速上手详细教程(含演示和命令大全)

前言

该篇博客是根据自己在小播站的视频编写的博客,作为学习的记录,也通过文字的方式能更快捷、精炼的提取出重要的知识点,方便初学者入门,也希望带给文字党一些有用的知识。

文章末尾贴有 Git 中常用的命令。

1.Git 介绍

1.1 什么是 Git 

        Git 是一个免费开源的分布式版本控制系统,它有一个特殊的叫做仓库的数据库来记录文件的变化,仓库中的每一个文件都有一个完整的历史记录,可以清晰地看到谁在什么时间修改了哪些文件的哪些内容,在需要的时候还可以恢复到指定的版本去再作修改和提交。Git 的功能非常强大。

文章末尾贴了 Git 中常用的命令

1.2 Git 的功能特点

1.2.1 分布式

        分布式版本控制系统可以有效避免由于中央服务器或者网络问题导致的工作堵塞,每个人的电脑上都有一个完整的版本库,即使是发生了网络问题,也可以进行离线工作

1.2.2 分支管理

        在自己的机器上根据不同的开发目的,创建分支,修改代码,还可以把服务器上最新版的代码fetch下来,然后跟自己的主分支合并,大大加大了工作效率。但是也存在一些缺点,在合并分支的时候有些时候需要人为的解决合并分支时的冲突问题。

1.2.3 代码托管

        Git 已经成为目前世界上最先进的分布式版本控制系统,超过90%的开源项目都在使用 Git 进行版本控制,美中不足的是中文的学习资料较少,学习周期长,至少相对我而言.....

2. Git 的安装和配置

2.1 Git 的下载

        简单来讲解一下 Git 的安装,Git 的安装我在之前的博客中也介绍过,不在赘述。

链接:Git

下载安装好后,在终端输入 git -v 来查看是否安装成功以及对应的版本信息

在任意文件夹的位置点击鼠标右键,点击显示更多选项可以看到可以打开 Git 命令行窗口,后面的代码命令就是在该窗口中执行

2.2 Git 的配置

下载好 Git 后需要进行一些配置,通过 git config 命令配置用户信息,这样在提交的时候才知道是谁提交了内容

git config --global user.name ""  // 引号中为自己的用户名,设置为和Gitee的账号一致
git config --global user.email "" // 引号中为自己的邮箱,也设置为和Gitee的账号一致

这一部分可以参考我之前写的博客“Gitee的注册、代码下载和提交”

还可以输入如下命令来保存用户名和密码,这样就不用每次都输入了

git config --global credential.helper store

输入如下命令可以查看自己的配置信息

git config --global --list

3. Git 的使用

3.1 新建仓库

有两种创建仓库的方式。

第一种是在自己电脑上直接创建一个本地仓库

git init // 初始化仓库

第二种是克隆远程仓库,如在 Gitee 、GitHub 上下载开源项目,就可以使用如下命令

git clone <url>       // <url>为克隆项目的地址

<url> 是开源代码的地址,如图(以码云上学生信息管理系统为例)

以上两种方法都可以创建仓库,一个是电脑本地仓库,一个是远程服务器上的仓库,下面介绍使用命令来创建仓库。

        首先在一个合适的文件夹下面,新建一个文件,然后输入初始化命令 git init 就可创建一个新仓库,在该文件夹中可以看到有一个 .git 的隐藏目录,这个目录存放了 Git 仓库中所有的数据

输入 git init learn-git 可以创建名为 learn-git 的仓库,使用 ls 命令可以查看该仓库下有哪些文件

3.2 添加和提交文件

3.2.1 工作区和文件状态

        在对 Git 进行文件操作时,首先我们来了解工作区、暂存区和本地仓库的概念以及他们之间的联系。

  • 工作区。在资源管理器里面看到的文件就是工作区
  • 暂存区。用于临时存储文件,保存即将提交到 Git 仓库的修改内容
  • 本地仓库。包含了完整的项目历史和元数据

用一张非常形象的图片表示如下,该图片来源我在小播站学习 Git 一个UP博主的,文章末尾有链接

当在工作区修改文件时,需要通过 git add 命令把修改内容后的文件放入暂存区中,暂存区就好比一辆货车,工作区就是加工后的产品,需要放入货车上拉倒本地仓库中。可以对多个文件执行 git add 命令,把需要提交的文件都先放入暂存区,该(货车)暂存区再统一发到本地仓库中。

了解了这三个区域的联系之后,下面来讲解文件之间的操作

3.2.2 命令行操作文件

在上文中,我们已经新创了一个名为 “learn-git” 的本地仓库,接下来继续在 Git 命令行窗口中输入

git status

可以查看当前仓库状态,有哪些文件、所处的分支、和这些文件处于怎样的状态等信息,因为是刚刚初始化的仓库,里面什么内容都还没有,现在我们在该仓库下建立一个文本文件。

建立文件的方式有很多种,可以直接在文件目录下右键鼠标创立,也可以在当前命令行窗口使用Linux 下的 echo 命令来创建

  • 创建了一个file1的txt文件,文件内容是“这是第一个文件”
  • 然后使用 ls 命令来查看当前文件下有的文件
  • cat file1.txt 查看该文件里面的文本内容

接着再输入 git status 命令查看仓库中的文件状态

红色部分显示,该文件已添加到工作区中,只是还没有发到暂存区中所以显示红色。再输入

git add file1.txt

把工作区的文件移到暂存区中去,然后再执行 git status 命令查看

发现工作区中的文件已全部移到暂存区中了;红框中提示,我们可以通过 git rm --cached file1.txt 命令把暂存区中的文件放到原来的工作区中,然后再查看文件的状态发现和第一次没提交到暂存区一致

git commit  命令把暂存区中的文件提交到本地仓库中,它只能把暂存区中的文件提交到仓库中,而工作区中的文件不行,工作区中的文件需要通过  git add 命令提交到暂存区中才能通过 git commit 命令移动到仓库中。

如:现在我们先创建第二个文件 file2.txt,然后执行 git commit -m "第一次提交" 命令

git commit -m "第一次提交"

然后再查看状态

git add * .txt          通配匹配符,上传所有.txt的文件到暂存区

git add .                上传所有的文件到暂存区

如果使用 git commit 后面不加 -m "日志",Git 会自动进入到一个交互式界面,需要使用 vim 文本编译器来编辑提交信息 

如,我们新建几个文件,然后提交到仓库的时候输入命令 git commit 后不加参数 -m

进入交互界面后,通过方向键定位光标的位置,然后在文段首按下 i 键进入文本编辑,输入日志,然后按 键盘左上角 Esc键退出编辑,输入 “:wq” 保存并退出界面,再查看状态的时候就显示提交的信息了。

查看提交记录:git log

查看简洁的提交记录:git log --oneline

3.3 git reset 回退版本

        为什么要回退版本?在日常的开发中,经常需要撤销之前的一些修改内容或者回退到某个版本,可以回到之前某一提交的状态,从而在那基础上继续写代码。

git reset 有三个回退模式

  • git reset --soft                 工作区和暂存区的文件都保留
  • git reset --hard                工作区和暂存区的文件都不保留
  • git reset --mixed              保留工作区的文件,不保留暂存区的文件(为默认参数)

下面通过实例来演示加深理解

        首先新建一个仓库 repo,在该仓库中新建3个文本文件,分别向其中填入内容

下面把repo仓库复制3份,进行不同回退模式下的不同情况

1. 在repo-soft 中打开 git 终端,执行参数为soft的回退版本命令

ls                  查看工作区的文件,可以看到回退到第二次提交时,保留了第三次提交时在工作区中的文件 file3.txt

git ls-files     查看暂存区中的文件,可以看到file3.txt文件也还在

2.在repo-hard 中打开 git 终端,执行参数为hard的回退版本命令

3.在repo-mixed 中打开 git 终端,执行参数为mixed的回退版本命令

总结:

三种回退模式因场景不同而使用不同。参数为 hard 的回退方式慎用。但即使是使用了该回退版本把暂存区的文件删了也没关系,因为已经提交过一次,而 Git 中的所有操作都是可以回溯的

回溯:

输入 git reflog 查看操作的历史记录,找到误操作之前的版本号,然后再使用 git reset --hard "版本号" 即可回溯 

3.4 使用 git diff 查看差异

首先我们来查看一下 1.txt 文件中的内容(在工作区中随意方式建立个文本文件,再向其中写入内容)

先用 cat 1.txt 命令查看文本种的内容,然后用Linux系统下的 vim文本编辑器修改其中的内容,加了一行“学废了吗”,然后使用 git diff (默认参数)查看工作区和暂存区之间的差异内容。

因为比较的是工作区和暂存区之间的差异,当我们把在工作区修改后的文件提交到暂存区,再使用该命令来查看两个区的差异发现没有输出了,因为工作区和暂存区的内容一致了。

git diff HEAD         表示工作区和版本库之间的差异

git diff --cached     表示暂存区和版本库之间的差异

然后我们提交一下,可以发现,三种查看内容差异都没有输出,表明工作区、暂存区和版本库之间的内容都保持一致了。

git diff 还可以查看两个版本之间的差异,在该命令后面加上两个版本的ID即可(两个版本之间的ID用空格隔开)

Git 提供了一个比较简便的查看当前版本和上一个版本之间的差异:

git diff HEAD~ HEAD     // ~ 可以替换成 ^ 效果一样
git diff HEAD~2 HEAD    //  表示当前版本和前两个版本的差异
git diff HEAD~2 HEAD 1.txt   //  表示只查看 1.txt的版本之间的差异

3.5 git rm 删除文件

这个命令很简单,rm 后加文件名即可删除掉文件。

现在我们来把 1.txt 这个文件给删除掉,然后来查看工作区的状态

我们删除的知识从工作区中删除了文件,因为 1.txt 这个文件之前我们已经提交到了暂存区中,所以该文件还存在于暂存区中;可以使用 git add 1.txt 命令来同步这两个区域

rm 命令不是 Git 中的命令 是操作系统中的命令,而 Git 为我们提供了一个更为简便的命令,可以同时删除工作区和暂存区之间的文件而不用同步多此一举了,方法也很简单,在rm前加个 git 即可:git rm 文件名

演示:

在工作区中建立一个 hello.txt 文件,再提交到暂存区中,然后使用 git rm hello.txt 命令同时在工作区和暂存区中删除该文件

最后需要提交,否者删除的文件在版本库中还是存在的

git rm --cached 文件名       把文件从暂存区删除,但保留在当前工作区中

3.6 .gitignore 忽略文件

        .gitignore 是 Git 中的一个特殊文件,该文件的作用是可以忽略掉一些不应该被加入到版本库中的文件,使得仓库体积更小、更加干净,也可使一些包含敏感信息的配置文件给忽略掉,从而保证信息的安全性。

演示:

首先我们创建两个日志文件作对比。然后创建.gitignore 文件再把access.log 文件放入 .gitignore 文件中,最后查看文件的状态

我们提交一下,再查看本地仓库文件

还可以在.gitignore 文件中使用通配符来忽略所有选择要忽略的文件 

如用 vim 进入.gitignore 文件后添加一行 *.log   表示忽略所有以.log结尾的文件。现在再建立一个hello.log 文件,然后来查看状态

 然后提交一下,发现 hello.log 文件没有被添加到仓库中,说明前面添加的通配符生效了

需要注意的是,我们是先把other1.log 文件提交到仓库中再对.gitignore文件作修改的,而这样。gitignore文件对other.log文件是没有作用的,需要把other.log文件从版本库中删除

使用上面提到的命令,git rm --cached 文件名  把other.log 文件从版本库中删除,在工作区中保留。

然后我们查看文件的状态,它提示我们 other.log 文件已从仓库中删除,然后我们再在该文件中追加内容,再看其状态,发现 other.log 文件已将不被追踪了

.gitignore 文件还可以忽略文件夹

演示:

首先我们在当前位置新建一个文件夹temp,然后在该文件夹下再建一个hello.txt 文件并向其中写入内容

然后进入.gitignore 文件对temp文件下的所有文件都忽略掉的配置

M .gitignore 表示 .gitignore 文件已经被修改过了。然后我们提交一下,再查看仓库里面的内容,可以发现 temp 并没有被提交到本地仓库中。

拓展:.gitignore 文件的匹配规则(类似于正则表达式)

#开头用作注释,而空格则被Git忽略

* 匹配任意个字符

? 匹配单个字符

[]  匹配列表中的单个字符,有"-"则表示该范围中的任意一个字符 如[1-9]匹配任意一位数字

! 表示取反

在GitHub上有已经写好的 匹配规则,可以直接使用,也可以做修改

3.7 关联本地仓库和远程仓库

        本地仓库通过 Git 命令来把本地的仓库上传到远程仓库中,使用的命令是 git push 

git remote add test git <url>   // 在<url>创建一个名为test的远程仓库,可以是在Gitee或者GitHub等地方
git remote -v        //  查看当前仓库所对应的远程仓库的别名和地址
git push -u test master:master     // 提交本地仓库到远程仓库中,后面的master表示的是远程仓库的分支,第一个master表示本地仓库的分支,如果两个分支相同,则可以只写一个分支名

使用 git ls-files 来查看本地仓库中的内容,然后再使用 git push 命令推送本地仓库到远程仓库

我使用的是 Gitee 来进行演示,并且已经初试化了远程仓库,提交后可以看到如下内容

这时,我们再在本地工作区新建一个文本文件,然后添加到暂存区,再提交到本地仓库最后发送到远端看有什么变化

除了把本地仓库推送到远程仓库,当远程仓库发生变化,也可以通过命令同步到本地仓库中

然后提交,使用 git pull 同步到本地仓库,然后查看本地仓库的状态

使用 git pull 命令时,如果远程仓库修改的内容和本地仓库中的修改内容有冲突的话合并就会失败,需要手动解决冲突,后面会讲到。

3.8 在 VSCode 中使用 Git

        首先先安装好VSCode,如果不想了解这一块的内容可直接跳到下文。然后安装插件 Git Graph 。之后建一个文件夹,拖动到VSCode中打开

可以很直观的看到文件修改前后的内容

  • U (Updated)   已更新未合并
  • A (Added)    已添加到暂存区
  • D (Deleted)    已删除
  • M (Modified)  已修改
  • R (Renamed)  重命名

然后我们在当前文件夹位置打开 Git 窗口,查看本地仓库的文件

我们提交一下,然后在 Gitee 中新建一个仓库,名为VSCodeGit 的仓库,使用 git remote add origin 命令来关联本地仓库和远程仓库

3.9 分支的操作

        分支是 Git 中非常重要的一个知识点,在团队的日常开发过程中,多个开发人员可以在自己的分支上进行开发工作,然后提交到主分支上进行合并,分支的优点就是能够提高团队协作的效率。

下面来具体操作:

首先建立一个新的仓库 branch-demo 用来演示,然后初始化仓库,建立两个文件,分别都提交到仓库中

echo main1 > main1.txt
git add .
git commit -m "main:1"      

echo main2 > main2.txt
git add .
git commit -m "main:2"

然后使用 git branch 命令来查看仓库中的文件(没有建立新的分支,默认是master分支)

注:早起版本默认分支的名字是 master ,后来的版本改为 main ,其实都是一个意思,只是因为master带有歧视的含义,就改为了main

接下来我们建立一个新的分支,并切换到该分支之下,再来建立新的文件。

git branch dev
git switch dev

因为是在dev这个分支上建立的文件,当我们再切换到master这个分支时,查看master上的文件发现没有在dev分支上建立的文件,这是因为还没有进行合并操作

为了更好的了解分支的并行性,我们先不把dev的分支合并到master分支中,先在master分支上再建立一个main3.txt文件并提交到仓库中,然后再合并看结果

然后在master分支上使用如下命令

git merge dev    // 合并分支
git log --graph --oneline --decorate --all  //  查看分支的合并过程

dev 分支合并过后并没有被删除,如果想要删除掉可以使用以下命令

git branch -d dev   // 如果分支没有合并就删除,可以把参数-d 换成-D 进行强制删除

注:在使用命令 git merge dev 合并分支时,Git 会自动提交一次日志,可以直接输入“:wq”保存,使用它默认的信息即可

3.10 解决合并冲突

        什么样的情况下才会发生合并冲突呢?当两个分支修改了同一个文件的同一行代码时,再合并两个分支就会发生合并冲突,这时候就需要我们手动解决冲突。下面我们用一个简单的例子来演示一下。在上面 branch-demo 仓库已有的基础上做演示。

1.新建一个分支。 git branch feat ,然后切换到该分支 git switch feat ,最后在main1.txt文件上新增一行内容,然后提交

2.切换回 master 分支,同样在该分支下修改main1.txt 文件,新增一行,然后提交。

3.合并这两个分支

在master分支下 git merge feat 把 feat 分支合并到 master 分支中,发生冲突

使用 vi main1.txt 命令编辑main1.txt 文件中的内容,保留我们想保留的部分 

如果在提交之前不想合并了,可以使用 git merge --abort 命令来终止合并

3.11工作流模型和分支管理

到这一节,Git 的功能就已经讲述完毕了,这一节将介绍分支的管理以及分支应用到公司是怎么具体使用的。

1.工作流模型

比较出名的工作模型是 GitFlow 模型,这个模型将分支分为了5中类型,每一种分支对应不同的用途。一般取名是

main 分支    --主线分支、核心分支(一般是不允许直接修改的,通过合并方式来修改)

hotfix 分支    --线上版本bug热修复分支

release 分支     --版本发布分支

develop 分支     --开发分支,用于开发和测试

featuer 分支      --功能分支,大部分是从开发分支中分离出来的,等功能稳定后就合并到开发分支

按照生命周期,这些分支又分为主要分支和辅助分支:main 和 develop 分支为主要分支,其他为辅助分支。

另一种比较流行的是GitHub Flow 模型,该模型适用于技术水平较高的团队或者开源项目,相对于GitFlow 模型,该模型简单明了,只有长期存在的主分支,并且主分支上的代码可以直接部署到生产环境中,一般是会设置分支保护,禁止团队成员直接在主分支上进行提交,成员可以从主分支中分离出自己的分支进行开发和测试,然后在本地提交代码,等到开发完成后可以发起一个 pull request 请求合并(简称PR),团队成员可以对代码进行Review评审,没有问题就可以合并到主分支中了

2.分支管理

分支的命名推荐带有意义的描述性名称命名分支;如功能的分支,可以使用feature-login-page来命名该分支,该分支的主要功能就是开发登录的功能。等这类命名方式来命名分支

分支管理:定期合并已经成功验证的分支,及时删除已经合并的分支;

                  保持合适的分支数量;

                  为分支设置合适的管理权限。

4. Git 命令大全

*初始化配置--配置用户名*
git config --global user.name "your_name"    // 引号中换成自己注册Gitee等的用户名

*初始化配置--配置邮箱*
git config --global user.email "your_email"    // 引号中填你的邮箱

*初始化一个仓库*
git init

*工作区提交到暂存区*
git add 1.txt

*暂存区提交到本地仓库*
git commit -m "my commit"

*查看仓库的状态*
git status

*查看提交历史记录*
git log

*查看简洁的提交记录*
git log --oneline

*查看暂存区中的内容*
git ls-files

*回退版本--工作区和暂存区都保留*
git reset --soft

*回退版本--工作区和暂存区都不保留*
git reset --hard

*回退版本--工作区保留,暂存区不保留*
git reset --mixed

*查看操作历史*
git reflog

*查看工作区和暂存区的差异*
git diff

*查看工作区和版本库之间的差异*
git diff HEAD

*查看暂存区和版本库之间的差异*
git diff --cached

*查看两个特定版本之间的差异*
git diff ******* *******  // 两串*为要比较的两个版本号

*删除工作区和暂存区中的文件*
git rm hello.txt

*删除工作区,但是保留暂存区中的内容*
git rm --cached hello.txt

*创建.gitignore文件*
echo .gitignore  // 在.gitignore文件中匹配要忽略的文件

*创建远程仓库*
git remote add origin git <url>

*查看远程仓库*
git remote -v

*本地仓库关联远程仓库*
git push -u origin main1:main2   // 把本地仓库main2分支推送到远程仓库main1分支中(两个分支名相同则只写一个即可)

*拉取远程仓库修改的内容*
git pull <远程仓库的名称> <远程仓库的分支名>

*查看分支*
git branch

*新建一个分支*
git branch <分支名>

*切换分支*
git switch <要切换的分支名>

*合并分支*
git merge <分支名>    // 在把分支名合并到当前所在命令行下的分支上

*查看分支图*
git log --graph --oneline --decorate --all

*删除分支*
git branch -d <分支名>   // -D 参数强行删除未合并的分支

*终止合并过程*
git merge --abort


**********其他命令***************

*查看工作区的文件*
ls

*查看指定文件里面的内容*
cat file.txt

*新建一个文件并向其中写入hello*
echo "hello" > hello.txt

*修改文件里面的内容*
vi hello.txt

 总结

        理解 Git 的基础知识和原理是为了更方便使用图形化工具来管理我们的代码,在VSCode、IDEA等其他开发软件中使用 Git 工作管理代码前,学习 Git 命令是非常有必要的。该篇博客如果存在不足之处希望读者们能多多指正 (0^0). 希望读到这里的读者也能够跟着下方链接视频或者跟着博客自己操作一遍加深印象,因为纸上得来终觉浅,绝知此事要躬行。

推荐小播站视频:【【GeekHour】一小时Git教程-哔哩哔哩】 https://b23.tv/Oc1S5p3

ps:封面的图片也是出于他的课的图

最后每篇分享:

无论是山,还是海,爱你的人在哪里,哪里就是故乡

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值