1. git安装及版本切换

git是linux操作系统作者linus使用C语言创建的分布式管理软件。所谓的分布式管理软件指的是:每个人的电脑上都是一个完整的版本库,不需要“中央服务器”。类似于docker,git不但可以将软件版本库保存到本地,也可以将软件仓库托管到远程仓库,比如github和gitee。在我们实际使用中,好处包括:

  1. 便捷地在本地控制(切换、创建)代码版本;
  2. 便捷地从远程仓库获取公开的代码资源;
  3. 便捷地切换代码分支;
  4. 通过合并代码的方式,多人开发一个项目。(该功能是git的重要功能之一)
一、git安装

ubuntu系统下安装git,可以先输入以下指令判断当前系统环境中是否已经安装了git:

git

输入上述指令后,如果没有安装git,则会弹出:

The program 'git' is currently not installed. You can install it by typing:
sudo apt-get install git

这时候只要按照上述建议,在命令行中输入:

sudo apt-get install git

即可完成git安装。再次输入git将会显示:
在这里插入图片描述

二、创建版本库

版本库又名仓库,Repository,可以简单的理解成一个目录,这个目录里边的所有文件都可以被Git管理起来。每个文件的修改、删除,Git都能追踪,以便任何时刻都可以追踪历史,或者在将来的某一个时刻可以“还原”,也就是版本回退。
首先通过如下指令明确要创建版本库的路径:

pwd

在这里插入图片描述

通过如下指令将当前目录变成Git可以管理的仓库,需要注意的是如果说需要使用docker的话,请在容器外进行Git的操作:

git init

在这里插入图片描述

输入上述指令后,Git就会在当前文件夹下创建空的仓库,存储路径为.git。Ubuntu系统下以“ . ”作为第一个字母的文件都是隐藏文件,隐藏文件的好处是可以防止我们对仓库造成意外损坏。
在这里插入图片描述

2.1 把文件添加到版本库 git add git commit

所有的版本控制系统都只能跟踪文本文件的变动,比如常用的.txt文件、.cpp文件、.hpp文件、.py文件、.md文件。Git也不例外,版本控制系统可以记录我们每一次对文件做的改动,但是对于图片、视频、word、pdf等二进制文件,git只能检测到它们的大小发生了变化,不能检测内容上有什么变化。
下面,创建一个名为readme.txt的文件,将该文件放到我们之前创建仓库的文件夹下:
在这里插入图片描述

把一个文件放到Git仓库需要两步:添加和提交
第一步,用命令 git add 告诉Git,将文件添加到仓库:

git add readme.txt

第二步,使用命令 git commit告诉Git,将文件提交到仓库:

git commit -m "wrote a readme file"

在这里插入图片描述

git commit是一条git指令, 后边的-m表示此次提交的说明,可以输入任何内容,但是最好是有意义的内容。如果需要提交多个文件,可以输入:

git add file1.txt
git add file2.txt file3.txt
git commit -m "add 3 files"

也可以输入:

git add .
git commit -m "add all files"

git add . 将会把当前目录下所有文件夹和文件都提交到版本库。如果文件夹下有比较大的压缩包或者rosbag,就需要注意add的时候不要将这些文件添加进去,或者我们可以通过 .gitignore文件来避免将某些文件或文件夹提交到git版本库中。

2.2 掌握工作区的状态 git status

在我们进行了程序的更改之后,比如将上述readme.txt文件更改为如下内容:
在这里插入图片描述

我们通过如下指令查看当前文件状态:

git status

在这里插入图片描述

Git会提示我们,某一个文件发生了更改,并且告诉我们尚未暂存以备提交的更改。
通过如下指令,查看某个文件到底做出了哪些更改,再来决定有没有必要对git status返回的内容进行处理:

git diff readme.txt

在这里插入图片描述

上述图片可以看出,Git确实检测到我们做出的更改。知道对readme.txt做出了什么修改,再把它提交到仓库就放心多了,提交修改和提交新文件是一样的两步:

git add readme.txt

在添加后,提交前,再通过

git status

查看一下待会儿要提交什么内容:
在这里插入图片描述

可以看到Git提示要提交的变更是:修改了readme.txt文件。确认好确实是我们要提交的工作之后,我们最后输入提交指令:

git commit -m "add distributed"

在这里插入图片描述

2.3 版本回退

程序开发会不断重复上述的循环步骤,包括:
git status: 版本库状态判断
git diff: 对比程序做出了哪些更改
git add : 将更改后的内容添加到版本库
git status: 将要提交内容的状态判断
git commit -m: 提交更改到版本库
每当代码修改到一定的程度,我们都可以为当前的代码版本创建一个“快照”,这个快照在Git中被称为commit,一旦我们将文件改乱了,或者误删了文件,还可以从最近的一个commit恢复。
我们再对readme做出更改,并提交,更改为如下内容:
在这里插入图片描述

至此,该版文件已经修改了三个版本,我们也进行了三次提交。通过如下指令,可以查看提交日志。该指令可以显示由近及远的提交日志。

git log

在这里插入图片描述

通过下述指令可以简化上述输出:

git log --pretty=oneline

在这里插入图片描述

通过VScode中的可视化插件Git graph,可以看到之前做出提交的时间线:
在这里插入图片描述

回退到历史版本
在Git中,用HEAD表示当前版本,此时是最新的提交:270b700710fbb32e1d07209b3e56e55a3956abf4
还是那个一个版本是HEAD**,上上个版本是**HEAD^;当回退多于两个版本时,使用HEAD~n表示回退到上n个版本;使用如下指令让我们的readme.txt程序回退到上一个版本:

git reset --hard HEAD^

在这里插入图片描述
在这里插入图片描述

可以看到我们的程序来到了当前版本的上一个版本。通过git log查看提交状态,可以发现第三个版本已经消失了:
在这里插入图片描述

更新到当前版本 git reflog git reset
如果在回退到历史版本后又后悔了,或者说回退的多了(这就体现了commit -m的重要性)还是想保留最新版本的话,需要使用如下指令查看以往的git操作:

git reflog

在这里插入图片描述

在这里我们可以找到,第三次提交时候-m所说的"append GPL"这句话,也可以找到我们的第三次提交版本号270b700,通过如下指令可以实现代码版本的更新:

git reset --hard Commit_ID

在这里插入图片描述

通过上述图片我们可以看到,我们从第二版的readme.txt,已经返回到了第三版的readme.txt。
在这里插入图片描述

2.4 工作区和暂存区

工作区是就是电脑里能看到的目录,比如我们所在的文件夹git_study就是一个工作区;
工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库。Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index)的暂存区, 还有 Git 为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD。
在这里插入图片描述

分支和 HEAD 的概念我们以后再讲。
前面讲了我们把文件往 Git 版本库里添加的时候,是分两步执行的:
第一步是用 git add 把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用 git commit 提交更改,实际上就是把暂存区的所有内容提交到当前分支。

因为我们创建 Git 版本库时,Git 自动为我们创建了唯一一个 master 分支,所以,现在,git commit 就是往 master 分支上提交更改。可以简单理解为,需要提交的文件修改都先放到暂存区,然后,一次性提交暂存区的所有修改。

我们再在工作区创建一个名为LICENSE的文件。当我们使用如下指令时,就是将两个文件的更改提交到了暂存区。

git add readme.txt
git add LICENSE

在这里插入图片描述

当我们使用如下指令时,就是将所有的暂存区内容一次性提交到当前分支。
在这里插入图片描述

当暂存区没有内容,且我们没有对工作区做出修改,那么工作区就是“干净”的。
在这里插入图片描述

暂存区是 Git 非常重要的概念,弄明白了暂存区,就弄明白了 Git 的很多操作到底干了什么。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值