Git 介绍、安装以及基本操作

发布于:2025-06-12 ⋅ 阅读:(23) ⋅ 点赞:(0)

目录

1. Git 介绍

2. Git 在 Ubuntu 下的安装

3. Git 基本操作

3.1 创建 Git 本地仓库

3.2 配置 Git

3.3 工作区、暂存区、版本库

3.3.1 添加文件

3.3.2 修改文件

3.3.3 版本回退

3.3.4 撤销修改

3.3.4.1 情况1:工作区代码还没有 add

3.3.4.2 情况2:已经 add,但没有 commit 

3.3.4.3 情况3:add 并 commit 了

3.3.5 删除文件


1. Git 介绍

        在编写各种⽂档时,为了防⽌⽂档丢失,更改失误,失误后能恢复到原来的版本,不得不复制出⼀个副本,⽐如:“报告-v1”“报告-v2”“报告-v3”“报告-确定版”“报告-最终版”“报告-究极进化版”...

        每个版本有各⾃的内容,但最终会只有⼀份报告需要被我们使⽤ 。但在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本。

        这样就会产生两个问题:(1)一个项目有许多个版本,随着版本数量的增加,文件就会越来越多,浪费磁盘空间。(2)随着版本的增加,各个版本修改了什么功能就会记不清楚。

        为了解决上述的问题,就引入了版本控制器 Git。版本控制器就是能了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业

        目前最主流的版本控制器就是 Git 。Git 可以控制电脑上所有格式的⽂件,例如 doc、excel、dwg、dgn、rvt 等等。对于我们开发⼈员来说,Git 最重要的就是可以帮助我们管理软件开发项⽬中的源代码⽂件

        需要注意的是,所有的版本控制系统只能跟踪⽂本⽂件的改动,⽐如 .txt ⽂件,⽹⻚,所有的程序代码等等。版本控制系统可以告诉你每次的改动,⽐如在第5⾏加了⼀个单词“Linux”,在第8⾏删了⼀个单词 “Windows”。⽽图⽚、视频这些⼆进制⽂件,虽然也能由版本控制系统管理,但没法跟踪⽂件的变化,只能把⼆进制⽂件每次改动串起来,也就是只知道图⽚从 100KB 改成 120KB ,到底改了啥版本控制系统也不知道。

2. Git 在 Ubuntu 下的安装

        Git 是开放源代码的代码托管⼯具,最早是在 Linux 下开发的。开始也只能应⽤于 Linux 平台,后⾯慢慢的被移植到 windows 下,现在 Git 可以在 Linux、Unix、Mac和Windows 这⼏⼤平台上正常运⾏了。

git --version

        使用上述命令查看 Git 版本,如果结果不是 Git 版本则代表没有安装。 下列是以安装了 Git 的结果。

sudo apt-get install git -y

        使用上述命令对 Git 进行安装。

3. Git 基本操作

3.1 创建 Git 本地仓库

        仓库是进行版本控制的一个文件目录。想要对文件进行版本控制,就必须先创建一个仓库出来。

        创建 Git 本地仓库对应的命令为 git init,命令要在文件目录下执行。

        如上图,在 local_repository 目录中创建一个 Git 仓库。创建成功之后会有一个隐藏目录 .git。 

        其中在 .git 目录下包含下图所示的内容,注意:.git 目录下的文件及其目录不要进行手动的修改。 

3.2 配置 Git

         当安装 Git 后⾸先要做的事情是设置你的 用户名称 和 e-mail 地址,这是⾮常重要的。配置命令如下:

git config [--global] user.name "Your Name"    // 引号中填你的用户名
git config [--global] user.email "email@example.com"    // 引号中填你的邮箱

        其中 --global 是一个可选项。如果使用该选项,表示这台机器上所有的 Git 仓库都会使用这个配置。如果希望在不同仓库中使用不同的 name 和 e-mail,可以不使用 --global 选项,但是执行命令必须要在仓库中

        使用 git config -l 查看配置:

        删除对应配置的命令为:

git config [--global] --unset user.name
git config [--global] --unset user.email

3.3 工作区、暂存区、版本库

         (1)工作区:机器上写代码或者文件的目录,对应上述就是创建 Git 仓库的那个目录。

        (2)暂存区:英文叫做 stage 或 index。一般存放在 .git 目录下的 index 文件中,有时暂存区也叫做索引。

        (3)版本库:又叫做仓库,英文叫做 repository。工作区有一个隐藏目录 .git,就是 Git 的版本库。版本库里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除、增加 Git都能跟踪,以便任何时刻都可以追踪历史版本,或者在未来某个时刻可以进行版本回退

         在创建 Git 版本库时,Git 会为我们⾃动创建⼀个唯⼀的 master 分⽀,以及指向 master 的⼀个指针叫 HEAD。(分⽀和 HEAD 的概念后⾯介绍)

        当对⼯作区修改(新增、删除)的文件执⾏ git add 命令时,暂存区⽬录树的⽂件索引会被更新

        当执⾏提交操作 git commit 时,master 分⽀会做相应的更新,可以简单理解为暂存区的⽬录
树才会被真正写到版本库中

        通过新建或粘贴进目录的文件,并不能称之为向仓库中新增文件,而只是在工作区新增了文件。必须要通过使⽤ git add 和 git commit 命令才能将⽂件添加到仓库中进⾏管理!!!

3.3.1 添加文件

        使用 git add 可以将工作区的文件添加到暂存区

(1)添加⼀个或多个⽂件到暂存区: git add [file1] [file2] ...
(2)添加指定⽬录到暂存区,包括⼦⽬录: git add [dir]
(3)添加当前⽬录下的所有⽂件改动到暂存区: git add .

        再使⽤ git commit 命令将暂存区内容添加到本地仓库中

(1)提交暂存区全部内容到本地仓库中: git commit -m "message"
(2)提交暂存区的指定⽂件到仓库区: git commit [file1] [file2] ... -m "message"

        注意:git commit 后面的 -m 选项要跟上描述本次提交的 message 信息,message 信息由用户自己填写,message 信息绝对不能省略并要好好描述,用于记录本次提交的细节。 

        使用 git log 命令查看历史提交记录: 

        加上 --pretty=oneline 可以把每个提交用一行进行显示: 

        说明:每次提交的一大串数字 498ce......0405d 是每次提交的 commit id(版本号),Git 的 commit id 不是 1,2,3... 递增的数字,而是计算出来的一个非常大的数字,用十六进制表示。 

        接下来查看一下 .git 目录的目录结构:

        index 就是暂存区,add 后的内容都是添加到这里。

        HEAD 就是默认指向 master 分支的指针

        默认的 master 分支就是刚才最新提交的 commit id: 

        objects 为 Git 的对象树,里面包含了创建的各种版本库对象及内容。当执行 git add 命令时,暂存区的目录树被更新,同时工作区修改的文件内容被写入到对象数种的一个新的对象中,就位于 .git/objects 目录下。

        查找 object时将 commit id 分成 2 部分,前 2 位是文件目录名,后 38 位就是文件名。找到这个文件之后,一般不能直接看到里面的内容,该类文件是经过 sha(安全哈希算法)加密过的文件,可以使用 git cat-file 命令来查看版本库对象的内容。 

        使用同样的命令查看 tree 后面的数字,就可以看到对那些文件进行的修改了。 

        再对 main.c 文件前的数字使用同样的命令,就可以看到对 main.c 进行了哪些修改。 

3.3.2 修改文件

        Git 跟踪并管理的是对文件的修改(包括文件新建、修改),而非文件本身。以下列为例进行介绍,当前 main.c 中的内容如下:

        对 main.c 中的内容进行修改:

        此时,仓库中的 main.c 和 工作区的 main.c 是不同的。 使用 git status 可以进行查看。

        使用 git diff [file] 命令用来显示暂存区和工作区文件的差异,显示的格式是 Unix 通用的 diff 格式。也可以使用 git diff HEAD -- [file] 命令来查看版本库和工作区文件的区别。 

        git add 添加文件到暂存区之后,使用git diff [file] 看到的就没有差异了。 同理 git commit 之后使用 git diff HEAD -- [file] 也没有差异了。

3.3.3 版本回退

        Git 能够管理文件的历史版本,如果有一天之前的工作出现了很大的问题,需要再某个特定的历史版本重新开始,这个时候就需要版本回退的功能了。

        执行 git reset 命令用于版本回退,可以指定退回某一次提交的版本。回退本质是将版本库的内容进行回退,工作区或暂存区是否回退由命令参数决定

git reset [--soft | --mixed | --hard] [HEAD]

        --mixed:为默认选项,使用时可以不用带该参数。该参数将暂存区的内容退回为指定提交版本内容,工作区文件保持不变。  

        --soft:参数对于工作区和暂存区的内容都不变,只是将版本库回退到某个指定版本

        --hard:参数将暂存区与工作区都退回到指定版本。切记工作区有未提交的代码时不要用这个命令,因为工作区回滚,没有提交的代码就再也找不回了,使用该参数要慎重。

        HEAD:HEAD 可以直接写为 commit id,表示指定回退的版本,也可以写成 HEAD,表示当前版本,HEAD^ 表示上一个版本,HEAD^^ 表示上上个版本,以此类推。也可以使用数字 HEAD~0,HEAD~1,HEAD~2 来进行表示。

        准备三个版本的 main.c 来进行测试。

// 版本1
#include <stdio.h>

int main()
{
	printf("hello git\n");
	printf("hello version1\n");
	return 0;
}

// 版本2
#include <stdio.h>

int main()
{
	printf("hello git\n");
	printf("hello version2\n");
	return 0;
}

// 版本3
#include <stdio.h>

int main()
{
	printf("hello git\n");
	printf("hello version3\n");
	return 0;
}

        使用 git log --pretty=oneline 进行历史提交查看。 

        现在发现 version 3 编写错误,想回退 version 2,重新基于 version 2 进行编写。由于希望的是工作区的内容也回退到 version 2,所以这里使用 --hard 参数。 

        再次查看日志,目前 HEAD 指向了 version 2。

        但是回退之后后悔了,又想回退到 version 3 版本,就必须拿到 version 3 的 commit id。运气好可以从终端之前打印的 log 日志中找到,运气不好 Git 还提供了一个 git reflog 命令,该命令用来记录本地的每一次命令。 

        version 3 前面的一小串数字,是 version 3 commit id 的部分。Git 版本回退的时候,也可以使用部分 commit id 来代表目标版本。

        Git 版本回退速度非常快,因为 Git 再内部有个指向当前分支(此处是 master)的 HEAD 指针,refs/heads/master 文件保存当前 master 分支的最新 commit id,当我们在回退版本的时候, Git 仅仅是给 refs/heads/master 中存储了一个回退的 commit id。 

3.3.4 撤销修改

         如果我们在工作区写了很长时间代码,越写越写不下去,想恢复到上一个版本,就有如下几种情况。

3.3.4.1 情况1:工作区代码还没有 add

        还是以上述 main.c 文件为例子,只在工作区修改了代码,但是没有 add,这时候有以下方法可以进行撤销修改。

        (1)直接删除目前工作区新增的代码。-- 不推荐

        (2)如果修改了很多行,并且修改了很多个文件的情况下,都忘记自己修改了哪些,可以使用 git checkout -- [file] 命令让工作区文件回到最近一次 add 或 commit 时的状态。注意:git checkout -- [file] 中 的 -- 不能省略,省略了命令变成了其他意思了

3.3.4.2 情况2:已经 add,但没有 commit 

        add 后保存到了暂存区,此时可以使用之前的 git reset 回退命令,使用 --mixed 参数,可以将暂存区内容回退为指定的版本,但是工作区文件保持不变。

        使用 git status 查看到 main.c 文件是已经 add 的状态了。 

3.3.4.3 情况3:add 并 commit 了

        没有把本地版本库推送到远程仓库中之前,可以使用 git reset --hard HEAD^ 回退到上一个版本

3.3.5 删除文件

        这里在工作区直接删除 main.c 文件。git status 会告诉哪些文件被删除了,此时工作区和版本库不一致,目前只是删除了工作区的文件。

        到这里之后,就有两种情况:(1)确定要将该源文件进行删除。(2)不小心删错了。

        对于第二种情况,可以使用 git checkout -- [file] 进行恢复。 

        对于第一种情况,把删除文件操作当成修改中的一种,和之前一样 add 修改并提交修改,就可以进行版本库中文件的删除了。 

        或者使用 git rm [file] 命令,将文件从暂存区和工作区删除,然后在进行 commit 提交。