Git基础(一)

一、基础概念

1.1 什么是git

git是版本管理系统(Version control systems ,VCS),用于对项目的版本进行跟踪管理。在git出现之前,拥有很多VCS,这些VCS的工作原理是对于项目中的每一个文件,保存他们随时间积累的改动。

normal vcs

git不同于其他版本管理工具,它每次改动都会保存所有项目文件的快照,如果某些文件在这次改动中没有变化,那么git只保存一个指向前一版本的链接。

git vcs

1.2 git如何保证检查到所有改动

git会根据项目目录结构以及文件内容,通过SHA-1算法计算生成校验和,所以只要你对项目做了改动,git就能察觉。

1.3 git的三种工作区域

git的工作区域分为工作区、暂存区和已提交区,当我们在项目中新增、修改文件时,这些改动都在工作区中。如果我们修改完成,使用git add命令,就可以讲这些改动由工作区移到暂存区。当文件处于暂存区时,我们就可以使用git commit命令将文件由暂存区挪到已提交区。当文件处于已提交区域时,所有的改动都会被永久保存在本地数据库中。如果你将项目根目录的.git文件夹删除,就会永久失去所有的版本记录。

git area

二、git基本使用方法

2.1 git初始配置

当我们初次使用git,用到的最简单且必要的配置就是为git配置一个全局可用的提交者(还是作者?提交者和作者的区别?)的名字和其邮箱,其中--global参数表示本次配置对于本机所有的git仓库都有用,除非你在项目的局部配置文件里面进行了同样的配置,局部的配置会覆盖全局的配置。

git config --global user.name "zhanghaokang"
git config --global user.email "zhanghaokang@antiy.cn"

此外,还需要配置git命令使用的编辑器,下面的命令就是将git默认的编辑器改为vim

git config --global core.editor vim

当使用git commit命令时,如果不使用-m参数加上提交信息,就会打开配置的editor让你进行下一步的操作。 还有一个可选的配置:

git config --global core.quotepath false

该配置会使git status的结果中的中文正常显示。

使用git config --list就可以展示出当前的所有配置。

2.2 初始化仓库

在项目根目录使用git init就可以将项目生成为git项目,该操作会在项目根目录生成一个.git目录,他就用于记录版本的变化,并且我们可以在其中进行项目特有的配置,例如修改该仓库特有的提交者姓名和邮箱。

2.3 将修改提交到本地仓库中

当项目被初始化为git仓库后,只要你在当前目录中新增文件时,git就会将该文件列为未被跟踪状态。使用git status可以看到当前仓库所有文件的状态。

On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    2.环境篇/工具部署和使用/开发工具/git/1.基础/
    2.环境篇/工具部署和使用/开发工具/git/git_reset_commit.md
    images/tools_deploy/dev/

可以看到,当前有一些文件和文件夹处于Untracked files中,这些文件处于未跟踪状态,对其进行修改git也不能知道改动的内容。此时,就需要使用git add命令,将文件添加到暂存区中。

git add 2.环境篇/工具部署和使用/开发工具/git/1.基础/git_fundamental.md

在上面的命令结束后,再次运行git status来查看当前工作区的状态。

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   2.环境篇/工具部署和使用/开发工具/git/1.基础/git_fundamental.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    2.环境篇/工具部署和使用/开发工具/git/git_reset_commit.md
    images/tools_deploy/dev/

可以看到,刚刚添加到暂存区的文件显示在Changes to be committed中,git还提示我们,如果我们想将该文件从暂存区移除,可以使用git restore --staged <file_name>命令。

当我们再次对该文件进行修改后,再次使用git status查看状态。

On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
    new file:   2.环境篇/工具部署和使用/开发工具/git/1.基础/git_fundamental.md

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
    modified:   2.环境篇/工具部署和使用/开发工具/git/1.基础/git_fundamental.md

Untracked files:
  (use "git add <file>..." to include in what will be committed)
    2.环境篇/工具部署和使用/开发工具/git/git_reset_commit.md
    images/tools_deploy/dev/

可以看到,现在又多出了一列Changes not staged for commit,这一列的文件中表示该文件已经被git所跟踪但是还有修改没用添加到暂存区。再次使用git add将修改添加到暂存区。

当所有的修改都添加到暂存区后,就可以使用git commit命令将这些修改挪到已提交区。

git commit -m "Develop | add git_fundamental.md"

其中-m表示添加提交信息,如果不加该参数,git会打开你配置的默认编辑器,然后你在那里修改提交信息。

当该操作完成后,所有变动就会被添加到本地git仓库,你可以使用git log来查看所有提交记录。

commit 552ec14f9ccdce80ae8c686820add3df7c800f9e (HEAD -> master, origin/master, origin/HEAD)
Author: zhaosq <zhaosq0815@163.com>
Date:   Mon Nov 23 10:28:21 2020 +0800

    Maintain | update test_tech on Nov 2020

    Signed-off-by: zhaosq <zhaosq0815@163.com>

commit f99fec9901064a78c7290e6bbd95de9660b17225
Author: hangxu <hangxu@antiy.cn>
Date:   Mon Nov 23 10:04:18 2020 +0800

    Bug | fix style error

该命令会显示项目的所有提交历史,commit后面跟的是commit id,用于标记当前版本(SHA-1生成的校验和)。如果你后悔了,可以使用git reset命令将本地的内容返回到对应commit id的版本。

git reset --hard f99fec9901064a78c7290e6bbd95de9660b17225

--hard表示将所有内容返回到f99fec9901064a78c7290e6bbd95de9660b17225版本,如果使用--soft,那么f99fec9901064a78c7290e6bbd95de9660b17225版本到当前版本的所有改动将会保留在暂存区。

上述就是git的基本工作流程,下图也很好的概括了这些常用操作。

git work flow

Last updated

Was this helpful?