Git 之光速入门系列

前言

Git 是开发过程中非常重要的一个工具,几乎是所有开发工作必须的,在本科阶段一知半解的,即使有 Git 的使用场景也没有深入去学习过。

看了许多 Git 教程和资料之后,在这里做个整理,提炼出最核心的原理,帮助你快速入门 Git。

但 Git 总归是个工具,需要动手实践才能快速掌握,建议所有学 Git 的都自己做个小实验,走一遍流程。

本系列文章的案例都是在 Windows 环境下运行的,需要安装 Git

目录

什么是 Git

Wikipedia: Git is software for tracking changes in any set of files, usually used for coordinating work among programmers collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different systems).

简单来说,Git 是一种分布式的版本控制系统,可以非常方便地进行版本控制代码同步,这就是 Git 的功能核心。

那么什么是版本控制呢?举个例子(🌰),我们要给项目加个功能,修改了很多文件,一段时间之后发现这个功能引发了非常多 bug,于是我们想撤销这个功能的添加,回到原始的版本。而 Git 这时候就能帮我们自动回退到目标版本,如果没有 Git,我们手动完成这个任务将会非常麻烦。

那么什么是代码同步呢?再举个例子(🌰),假如我们有五个人共同开发一个项目,我对项目代码进行了修改(涉及的文件非常多),会影响到其他人的开发(也许在修改同一份文件)。这时候我需要告知其他人,并将我的修改同步到他们的本地文件上。Git 这时候就能自动完成他们本地代码的同步,如果没有 Git,手动完成这个任务也会非常麻烦。

Github 和 Git

有相当一部分人学 Git 是为了用 Github,这其中就包括我,当然也有一部分人学 Git 是工作需求。

Git 是一个工具,Github 是一个社区,只是 Github 使用了 Git 作为其底层的工具和操作逻辑。Github 中绝大部分的操作和概念和 Git 中是一样的,所以要学会怎么用 Github,先学会 Git。

即使不打算使用命令行进行操作,也建议学一下 Git 的相关命令,理解了命令之后用图形化操作还是命令行都没关系。只有从命令行入手才能理解到最深刻,最彻底的 Git。

所以请抛开你的烦躁,沉下心和我进入 Git 的命令世界吧!

Git 不过那些事:基本概念

单纯的理论表述不那么容易理解,目前不理解这些概念没有关系,在后续的实际操作中一步步理解即可。

respository:仓库,存放代码的地方,Git 所有操作都在其中完成
commit:提交修改,将暂存区的修改提交至仓库,会留下记录
branch:分支,签出一个新的分支,可以理解为复制一个仓库,后续有详细解释
merge:合并分支,后续有详细解释

workspace:工作区,本地的开发环境,我们所有实际的开发都在工作区完成
stage:暂存区,我们在工作区完成的任务会先提交到暂存区
master:主分支,也就是我们的仓库,在确认暂存区的修改没问题之后,提交到仓库,完成最终的修改

提交流程:工作区->暂存区->主分支

在工作区和暂存区中的任何修改,在 commit 之前,都不会影响到仓库

新世界的大门:仓库的初次建立

初次建立时,我们会用到五个命令,但是都非常简单,可选命令代表它对仓库没有实际的影响,只是帮助我们更好地理解它是怎么工作的。

命令 功能
git init 初始化仓库
git add 提交修改至暂存区
git commmit 提交修改
git status 查看仓库状态
git log 查看仓库日志

本节的工作:在文件夹 git 中初始化一个仓库,并向仓库添加一个文件 README.md

1. 初始化仓库
PS C:\git> git init
Initialized empty Git repository in C:/git/.git/

2. 提交修改至暂存区
PS C:\git> git add README.md

3. 查看状态(可选)
PS C:\git> git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md

4. 提交修改
PS C:\git> git commit -m 'First commit'
[master (root-commit) 8bce68b] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 README.md

5. 查看状态(可选)
PS C:\git> git status
On branch master
nothing to commit, working tree clean

6. 查看仓库日志(可选)
PS C:\git> git log
commit 8bce68b1abc8aad13a8b927f799378ae93d730d4 (HEAD -> master)
Author: SyanLin <475694569@qq.com>
Date:   Wed Jul 13 14:11:34 2022 +0800

    First commit
  1. 初始化仓库:git init
    首先我们需要初始化一个仓库,让 Git 进行相关的初始化,帮助我们完成后续的工作。案例中在 git 文件夹下初始化了一个空仓库,文件夹中有一个文件 README.md,此时并不在仓库中。
    这里需要明确一个概念,文件夹和仓库不是一个概念,在文件夹中并不一定在仓库中(文件夹是本地环境,是工作区,要进到仓库,要经过工作区->暂存区->仓库的流程)。

  2. 提交修改至暂存区:git add <filename>
    我们想将 README.md 文件添加至仓库中,我们需要先将修改提交到暂存区(这里的修改是广义上的,删除、添加、修改文件都算是修改)。

  3. 查看状态:git status
    我们可以输入该指令来查看仓库状态,仓库状态告诉我们,目前有一个修改在等待提交,其修改类型是添加文件。

  4. 提交修改:git commit -m <message>-m 是提交选项,意思是此次提交附带一条信息)
    我们可以提交很多修改到暂存区,然后一次性提交到仓库并留下一条日志,因为你肯定也不想每一个细小的修改都留下日志吧。反馈的信息告诉我们,这次提交涉及到一个文件的修改。

  5. 再次查看状态:git status
    我们提交到仓库后,暂存区就清空了,这时就没有任何修改需要提交了。

  6. 查看仓库日志:git log
    此时我们查看仓库日志,可以看到一系列日志信息,commit 后的一串序列是 commit id,我们暂时可以忽略它,HEAD -> master 意思是在主分支,关于分支我们后续会进行讨论。
    然后还有一些提交者和提交时间相关的信息,还有一条提交时附带的信息,这对于团队协作是很重要的,即使是单人工作,也建议每次 commit 都附带上信息。

监控一切的天眼:文件修改

我们在工作区的所有修改,都会被 Git 给监测到,就像个无所不在的天眼。

在本节中,我们会学一个新的命令 git diff,用于帮助我们查看文件修改前后的对比。

命令 功能
git diff 查看文件修改
git rm 删除文件

本节的工作:修改文件,并 commit 至仓库

原文件:
## Welcome to git

修改后:
## Welcome to git
我对文件进行了修改

1. 查看文件修改(可选)
PS C:\git> git diff
diff --git a/README.md b/README.md
index efaaac0..caaaaf4 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
 ## Welcome to git
+我对文件进行了修改

2. 提交修改至暂存区
PS C:\git> git add README.md

3. 提交修改
PS C:\git> git commit -m 'Update README.md'
[master b9ccd8c] Update README.md
 1 file changed, 1 insertion(+)

4. 查看仓库日志(可选)
PS C:\git> git log
commit b9ccd8c12491fc62800773a67f46f25aa2db6c6d (HEAD -> master)
Author: SyanLin <475694569@qq.com>
Date:   Wed Jul 13 14:28:52 2022 +0800

    Update README.md

commit 8bce68b1abc8aad13a8b927f799378ae93d730d4
Author: SyanLin <475694569@qq.com>
Date:   Wed Jul 13 14:11:34 2022 +0800

    First commit
  1. 查看文件修改:git diff
    我们忽略那些看起来不太知道意义的信息(暂时没必要知道,感兴趣可以自行查询相关文档),最底下一行告诉我们修改内容是添加了一行,内容是 我对文件进行了修改。接着我们继续工作区->暂存区->仓库的流程,将修改 commit 至仓库

  2. 提交修改至暂存区

  3. 提交修改:
    反馈信息告诉我们,一个文件被修改了

  4. 查看仓库日志:
    此时查看日志,可以看到日志比之前多了一条

我们之前提到过,删除文件也是一种修改,但在下面这个案例中就会显得有些奇怪。

我们手动删除了 README.md 文件,希望在仓库中也删除它,于是我们遵循先前的流程,如小标题所写的那样,git add 实际上是提交修改到暂存区,但命令看起来像是某种添加文件的操作。在删除这个案例中,实际上没有文件可以添加,查看状态,Git 也明确告诉你,操作是删除。

1. 查看状态(可选)
PS C:\git> git status
On branch master
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        deleted:    README.md

no changes added to commit (use "git add" and/or "git commit -a")

2. 提交修改至暂存区
PS C:\Users\china\Desktop\git> git add README.md

3. 查看状态(可选)
PS C:\Users\china\Desktop\git> git status
On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        deleted:    README.md

4. 提交修改
PS C:\Users\china\Desktop\git> git commit -m 'Delete README.md'
[master 8c6ec27] Delete README.md
 1 file changed, 3 deletions(-)
 delete mode 100644 README.md

所以,对于删除我们可以用另一种更容易理解的方式,虽然他们做的事是一样的。而且在这里不需要先在文件夹中手动删除 README.md,Git 会自动帮我们在文件夹中删除它。

1. 删除文件
PS C:\Users\china\Desktop\git> git rm README.md
rm 'README.md'

2. 提交修改
PS C:\Users\china\Desktop\git> git commit -m 'Delete README.md'
[master 9eb2d95] Delete README.md
 1 file changed, 3 deletions(-)
 delete mode 100644 README.md

到目前为止,我们已经学会了 Git 最基本的命令和操作。在下一节中,我们将会学习 Git 最重要的核心之一:版本控制,实现版本回退和操作撤销。

上一篇 下一篇

评论 | 0条评论