面试官都在问 | Linux命令之git

Linux命令之git

在这里插入图片描述

0.git介绍

git是一款开源的分布式版本管理工具,git的诞生也是相当传奇的,由Linux之父-Linus Benedict Torvalds开发而来,当初Linus Benedict Torvalds仅仅是为了辅助Linux内核的开发才一并开发了这个至今为止世界上最快的、最简单的版本管理工具。

在互联网公司中常常用到git这样的版本管理工具,所以这篇文章给大家介绍git版本管理工具的简单用法。一般我们使用git版本工具都有以下需求

  • 克隆远程仓库
  • 提交代码到远程仓库
  • 将远程仓库代码更新到本地
  • 删除远端仓库文件

1.工作原理

术语解释

工作目录(workspace): workspace的内容是我们本地写的代码或者编辑的文件,也是最新的;

缓存区(index): 又被称之为暂存区,标记了当前git帮助管理我们本地的哪些代码或者文件;

本地仓库(local repository): 保存了对象被提交过的各个版本,比起工作目录(workspace)和暂存区(index)的内容,它要更旧一些,不能联网时本地代码可先提交至该处;

远程仓库(remote repository): 远程仓库是本地仓库的异地备份,远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的

下面的这张图片是git版本管理工具的简单示意图,

在这里插入图片描述

我们稍微了解了一点git的术语解释和看到上图中git版本控制的原理图之后,我们发现任何对象都是在工作目录中诞生和被修改,任何修改都是从进入index区才开始被版本控制的;

2.在码云上建立一个远程仓库

为了让大家更加的了解git是如何进行版本管理的,所以我们在码云上建立一个远程的仓库,码云和github一样也是一个基于git的代码托管和研发协作的平台。

2.1 码云的地址
https://gitee.com/
2.2 新建仓库

打开码云之后我们在右上方点击+号,新建仓库

在这里插入图片描述

2.3 填写创建仓库选项

在这里插入图片描述

2.4 查看创建的仓库

如下图所示,我们拥有了一个“GitTest”的仓库

在这里插入图片描述

3.克隆远程仓库

3.1 拷贝远程仓库路径

当我们在码云创建好仓库之后,拷贝远程仓库的路径,如下图所示:

在这里插入图片描述

3.2 使用git clone [url]来拷贝远程仓库到本地

第一步:使用git clone https://gitee.com/ann34857/GitTest.git来拷贝远程仓库,当看到“done”单词的时候,表示克隆成功

第二步:使用ls命令查看克隆效果

第三步:使用ls [远端仓库名称]查看仓库内文件和远程仓库是否一致

[Ann@localhost TestGit]$ git clone https://gitee.com/ann34857/GitTest.git
Cloning into 'GitTest'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (4/4), done.
[Ann@localhost TestGit]$ ls
GitTest
[Ann@localhost TestGit]$ ls GitTest
README.en.md  README.md

在上面三步的运行结果中,我们不难发现,远程仓库GitTest已经被我们克隆到本地,并且在本地创建了一个GitTest的文件夹,在文件夹下,有远程仓库在创建时候的“README.en.md”和“README.md”文件。此时我们就可以在GitTest文件夹下创建和修改我们需要让git工具帮助我们管理的文件了,让我们接着往下看,如何提交到代码到远程仓库吧。

4.提交代码到远程仓库

4.1 创建文件

为了方便大家看到git帮助我们管理代码或者其他文件,我们在"GitTest"文件下创建"test.cpp"文件,如下所示:

[Ann@localhost GitTest]$ ls
README.en.md  README.md  test.cpp
[Ann@localhost GitTest]$ cat test.cpp
/*================================================================
*   Copyright (C) 2020 Sangfor Ltd. All rights reserved.
*   
*   文件名称:test.cpp
*   创 建 者:Ann
*   创建日期:2020年04月27日
*   描    述:
*
================================================================*/

#include <iostream>

int main()
{
    std::cout << "我爱我的祖国" << std::endl;
    return 0;
}

在上面的两步中,我们先使用ls命令查看"GitTest"文件下,查看我们新创建的"test.cpp"文件。在使用cat test.cpp命令查找”test.cpp“文件当中的内容

4.2 标记文件

标记文件是指告诉git管理工具,需要帮助我们管理文件了,从git的角度来看,是将文件标记在缓存区(index)。也就是我们在“1.工作原理”当中看到的保存在缓存区(index)。

接下来,我们使用git add命令来标记文件到缓存区(index)

[Ann@localhost GitTest]$ git add test.cpp

当我们执行完毕上述命令之后,我们可以使用git status命令查看提交的结果,如下所示:

[Ann@localhost GitTest]$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	new file:   test.cpp
#

经过执行命令git status,我们发现“Changes to be committed”就说明当前“test.cpp”为暂存状态。也就是意味着当前test.cpp已经可以被git版本管理工具管理起来了,接下来,我们就需要将test.cpp文件提交到本地仓库了

4.3 提交到本地仓库

经过上面将文件标记到暂存区,接下来,我们就需要将文件提交到本地仓库当中。提交到本地仓库当中,我们使用git commit -m "[提交内容日志]"命令来提交到本地仓库

[Ann@localhost GitTest]$ git commit -m "测试版本管理工具git"
[master c706528] 测试版本管理工具git
 1 file changed, 17 insertions(+)
 create mode 100644 test.cpp

经过使用git commit -m "[提交内容日志]"命令,当我们看到“create mode 100644 test.cpp”的时候,我们已经将"test.cpp"文件提交到了本地仓库当中,大家注意,到这一步,仅仅是将“test.cpp”文件提交到本地仓库,远程仓库当中并没有"test.cpp"文件。接下来,我们就可以将刚刚提交到本地仓库的“test.cpp”文件,提交到远程仓库了。

4.4 推送到远程仓库

经过上面将文件提交到本地仓库之后,接下来,我们就需要将文件推送到远程仓库当中。在我们推送到远端仓库的时候,我们使用命令git push origin [分支名称],而我们在创建仓库的时候,码云已经帮我们创建了一个主分支master了,所以,我们可以直接推送到远端仓库的master分支下。当然有主分支的概念,也会有其他分支的概念,老铁们,可以研究研究。master主分支如下图所示:

在这里插入图片描述

接下来,我们知道推送到master主分支之后,我们使用命令 git push origin master用来将刚刚本地仓库的内容推送到远程仓库

[Ann@localhost GitTest]$ git push origin master 
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 580 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/ann34857/GitTest.git
   96e8c62..c706528  master -> master

当我们看到“Writing objects: 100% (3/3), 580 bytes | 0 bytes/s, done.”,这样的语句之后,表示我们已经将本地仓库的内容推送到了远程仓库。我们可以打开码云,访问远程仓库,验证是否已经推送成功。如下图所示:

在这里插入图片描述

接下来我们还可以验证下“test.cpp”当中文件内容是否一致,如下图所示:

在这里插入图片描述

从远程仓库当中来看,我们不难发现和我们本地文件内容一致。至此,git提交代码到远程仓库就为大家介绍到这里。感兴趣的老铁可以再去研究研究,git的分支是什么,如何将代码提交到不同的分支上。

5.将远程仓库代码更新到本地

当我们多人协同工作的时候,我们有时候需要将别人修改的文件内容获取到自己的本地仓库当中,这会儿我们就需要将远程仓库当中的代码更新到自己本地了。

5.1 在码云当中修改文件

在码云修改文件,是为了体现远程仓库当中的文件修改掉了,模拟多人协同工作的场景。我们在浏览器当中修改test.cpp文件,分为4个步骤,如下图所示:

第一步:点击编辑按钮

在这里插入图片描述

第二步:修改文件
第三步:提交

在这里插入图片描述

在这里插入图片描述

第四步:查看修改的内容

在这里插入图片描述

当我们经历了4个步骤之后,我们已经在"test.cpp"文件当中增加了一行代码“std::cout << “我是在码云当中修改的内容” << std::endl;”,此时,在本地仓库当中,git管理的"test.cpp"文件并没有更新掉,所以我们需要手动进行更新。此时本地仓库当中"test.cpp"源码文件的内容,如下所示:

[wudu@localhost GitTest]$ cat test.cpp
/*================================================================
*   Copyright (C) 2020 Sangfor Ltd. All rights reserved.
*   
*   文件名称:test.cpp
*   创 建 者:Ann
*   创建日期:2020年04月27日
*   描    述:
*
================================================================*/

#include <iostream>

int main()
{
    std::cout << "我爱我的祖国" << std::endl;
    return 0;
}
5.2 更新本地代码

当远程仓库当中的test.cpp源码修改了以后,我们需要更新本地仓库的时候,使用git pull origin master命令来进行更新。需要注意的是,同样我们命令后的“master“也是分支名称,同样,我们是从主分支master上面进行更新本地仓库,如果是其他分支,需要指定其他分支的名称。老铁们,可以自己尝试下。

第一步:更新
[Ann@localhost GitTest]$ git pull origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://gitee.com/ann34857/GitTest
 * branch            master     -> FETCH_HEAD
Updating c706528..3525180
Fast-forward
 test.cpp | 1 +
 1 file changed, 1 insertion(+)

当我们看到了“1 file changed, 1 insertion(+)”语句之后,表示我们更新了本地仓库,所以使用cat test.cpp验证文件内容是否更改掉了,如下所示:

第二步:验证
[Ann@localhost GitTest]$ cat test.cpp
/*================================================================
*   Copyright (C) 2020 Sangfor Ltd. All rights reserved.
*   
*   文件名称:test.cpp
*   创 建 者:Ann
*   创建日期:2020年04月27日
*   描    述:
*
================================================================*/

#include <iostream>

int main()
{
    std::cout << "我爱我的祖国" << std::endl;
    std::cout << "我是在码云当中修改的内容" << std::endl;
    return 0;
}

通过查看“test.cpp"文件当中的内容,我们发现,在“test.cpp”当中已经更新了“std::cout << “我是在码云当中修改的内容” << std::endl;”,至此,我们的更新也给大家介绍完毕了;

6.删除仓库当中的文件

我们在工作当中通常会遇到需要将仓库当中管理的文件删除掉,这时候,我们不能直接删除文件,而是需要两个步骤,先删除本地仓库文件,在删除远程仓库文件。所以下面就给大家介绍,如何删除本地仓库的文件和如何删除远程仓库中的文件。使用我们当前仓库当中的"test.cpp"文件为例,进行演示。

6.1 删除本地仓库的文件
第一步:使用git rm命令同时从工作区(workspace)和缓存区(index)中删除文件

如下所示:

[Ann@localhost GitTest]$ git rm test.cpp
rm 'test.cpp'
[Ann@localhost GitTest]$ ls
README.en.md  README.md

从上述命令当中我们不难看出来,已经从工作区当中将文件删除掉了,现在我们使用git status命令查看是否存从缓存区当中删除掉了,如下所示:

[wudu@localhost GitTest]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	deleted:    test.cpp
#

当我们看到“deleted: test.cpp”语句的时候,表示已经从缓存区(index)当中删除掉了,并且看到“Changes to be committed:”语句,提示我们需要提交到本地仓库,所以接下来,我们就提交到本地仓库当中。

第二步:提交到本地仓库

当我们已经将工作区(workspace)和缓存区(index)当中的文件删除掉的时候,接下来我们使用 git commit -m "提交的日志内容"命令来提交到本地仓库,如下所示:

[Ann@localhost GitTest]$ git commit -m "delete test.cpp"
[master 9a88e63] delete test.cpp
 1 file changed, 18 deletions(-)
 delete mode 100644 test.cpp

此时,我们也就提交到了本地仓库,但是老铁们请注意,但是远程仓库当中“test.cpp”并没有删掉,如下图,我们再去查看码云当中远端仓库的情况

在这里插入图片描述

接下来,我们就删除下远程仓库当中的“test.cpp”文件,老铁们,我们继续往下看。

6.2 删除远程仓库当中的文件

删除远程仓库的文件的做法也只需要使用git push origin master命令即可,就可以将刚才删除本地仓库的指令推送到远程仓库,如下所示:

[Ann@localhost GitTest]$ git push origin master 
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 212 bytes | 0 bytes/s, done.
Total 2 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-5.0]
To https://gitee.com/ann34857/GitTest.git
   3525180..9a88e63  master -> master

当我们推送完毕之后,再去查看码云上的远端仓库,如下图所示:

在这里插入图片描述

通过上面的截图,我们不难发现,提交的日志为“delete test.cpp”, 并且我们看不到之前远程仓库当中的“test.cpp”文件了。至此,删除仓库当中的文件操作就介绍完毕了,老铁们,练习起来吧。

7.总结

git clone [远端仓库的url地址]: 克隆远程仓库

git add [文件名称]: 将文件添加到缓存区(index), 其含义就是告诉git,需要帮助我们管理某个文件了

git commit -m "[日志内容]": 提交到本地仓库

git push origin [分支名称]: 将本地仓库内容推送到远程仓库的某一分支上

git rm [文件名称] :删除工作区(workspace)和缓存区(index)当中的文件

git rm -r [文件夹名称]: 删除工作区(workspace)和缓存区(index)当中的文件夹

git status: 查看状态
在这里插入图片描述

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页