一、概述

git的简介与基本操作方法

git 的每个指令都有很多功能。如果你想深入了解某个指令,可以通过查阅git 的官方帮助,如下指令

# 查看git的所有指令
git --help
# 查看 add 指令的详细帮助,此方法可以查看其他指令的详情
git add --help

二、本地仓库的初始化
有两种初始化 git 项目仓库的方法。第一种是从一个 git 服务器克隆一个现有的 git 仓库。第二种是在现有项目 或 空项目目录下初始化 git 仓库,并绑定上远端仓库。

  1. 创建远端仓库

初始化本地仓库前,我们先创建远端仓库。远端仓库我们可以使用 github,这是最知名的基于 git 的代码免费托管服务,缺点是国内访问可能比较慢。也可以用 gitee,这是国内的基于 git 的代码免费托管服务,特点是访问速度快、中文界面。我们以 gitee为例演示git的基本功能,gitee 的网址是 https://gitee.com,先创建个人账号,登录之后点击网址右上角的 “创建仓库”,即进入创建仓库界面,如下图

注意:

仓库名可以用中文,但是仓库路径必须要用英文标识

如果希望自己的仓库可以被别人访问,则选择 “开源”

其他选项默认即可,点击“创建”按钮即可完成 远端仓库的创建。

  1. 从远端克隆仓库

我们在 gitee 上有一个现有的仓库 https://gitee.com/s4het/test.git

将远程 test 仓库克隆到本地,克隆完成后本地将自动创建出 test 目录,同时远端的文件同步到本地。

将远端 test 仓库克隆到本地

git clone https://gitee.com/s4het/test.git
克隆的同时可以也重命名,如下命令

将远端 test 仓库克隆到本地,同时命名为 demo

git clone https://gitee.com/s4het/test.git demo1

  1. 在本地初始化 git 仓库

如果我们不克隆远端的仓库到本地,下面还有两种方法可以将本地的仓库绑定到远端的仓库。

方法一:先将本地代码目录初始化为 git 项目,再绑定远端仓库

创建项目目录

mkdir test

进入项目目录

cd test

初始化git仓库

git init

绑定绑定远端仓库

git remote add origin https://gitee.com/s4het/test.git
方法二:将远端仓库的.git目录拷贝(或移动)到本地项目目录

进入项目目录

cd test1

拉取远端仓库,并命名为 temp ,代表的是临时目录

git clone https://gitee.com/s4het/test.git temp

将 temp 目录中的 .git 目录移动到当前项目目录

mv temp/.git ./

删除掉临时目录

rm -r temp
上面两种方法,都可以将本地项目目录与远端的 git 仓库进行绑定,绑定之后方可进行代码的同步、推送。

三、git 仓库的基本操作

  1. 查看仓库的状态

git status

  1. 将工作区文件添加到 git 缓存区

我们先创建一个文件,如下命令

# 添加一个 c++ 源代码文件
touch main.cpp

现在文件在工作区,使用 git status 命令查看 git 状态,可以看到一个关键词 Untracked files,也就是没有被 git 监控的文件,这里所说的监控就是跟踪文件的变化,如下图

将文件添加到 git 缓存区后,项目里的文件将会被 git 监控,使用以下命令将 main.cpp 文件添加到 git 缓存区

git add main.cpp
此时再使用 git status

可以看到 Changes to be committed 关键词,代表已经在 git 缓存区的文件。

在实际开发中,当我们每次编码完成后,工作区可能创建了很多文件,我们可以使用以下命令将所有文件添加到 git 缓存区。

.代表当前目录,以下命令是将工作区的所有文件添加 git 缓存区

git add .

  1. 将缓存区文件提交到 版本库

使用以下命令将缓存区的文件提交到版本库

-m 参数后面代表的信息备注

git commit -m "first commit"
此时我们看到终端的一些提示信息,包含文件变动的一些基本信息,如下图

每次提交的变更内容,都会被 git 记录下来,我们可以使用以下命令查看 git 提交记录

git log
此时我们可以看到如下图信息

第一行:本次提交的基本信息。第 2 列表示 git 提交的唯一标识(我们可以叫做提交id、commit id,或者版本id);第 3 列表示当前分支是 master分支

我们现在还没详细说明分支概念,你只需要知道有这个名词就可以了,后面章节中将说明。任何时候,HEAD 所指向的分支就是当前分支。在无任何新建分支情况下,也就是只有 master 分支,HEAD 所指向的分支就是当前分支 -- master。在新建分支并切换到新分支后,HEAD 所指向的分支就是新分支。

第二行:作者信息。第 2 列是我们设置的本地作者名称;第 3 列是我们设置的作者邮箱

第三行:git 提交的时间

剩余信息:作者提交时的备注信息

  1. 查看文件差异

在 git 仓库中的文件,都会被 git 跟踪,如文件修改历史、是否是新文件、文件提交历史等等。

git diff 命令用于查看的文件的差异,我们可以通过该指令对比文件的各种差异,以下是一些常用指令

比较所有文件与缓存区文件差异

git diff

比较当前文件和缓存区文件差异

git diff

比较两次提交之间的差异

git diff

在两个分支之间比较

git diff

比较缓存区和版本库差异,与下一条指令的效果一样

git diff --staged

比较缓存区和版本库差异,与上一条指令的效果一样

git diff --cached

仅仅比较统计信息

git diff --stat
但要注意的是,只有使用 git add 指令将文件文件到缓存区之后,文件的信息才会被记录,接下来我们做个简单演示,修改main.cpp,添加以下代码

#include <iostream>
using namespace std;
int main(){
  cout << "hello world" << endl;
}

通过git diff命令查看工作区与缓存区的文件差异

  1. 将本地仓库提交同步到远程仓库

我们使用以下命令将本地代码推送到远端仓库

# 将当前分支 (默认是master) 推送到远端仓库的 master 分支
git push -u origin master

实际上提交成功之后,远端的 main.cpp 文件是空的,是因为本地版本库还是一个空的 main.cpp文件。虽然main.cpp 文件被修改了,但还未提交到本地的版本库。所以还需要进行下面的操作

# 将所有变更添加的缓存区
git add .
# 将缓存区的变更提交到 本地git版本库
git commit -m "修改main.cpp文件"
# 将本地版本库提交到远端仓库
git push -u origin master

此时,我们再浏览远端仓库,可以看到代码已经同步过去了。

最后修改:2021 年 12 月 06 日
如果觉得我的文章对你有用,请随意赞赏