Git基操

标签: Git  git

一、git简介

1.1、git概述

Git是分布式版本控制系统(Distributed Version Control System,简称 DVCS) ,分为两种类型的仓库:本地仓库和远程仓库。 下载地址:https://git-scm.com/download

  • 本地仓库:是在开发人员自己电脑上的Git仓库

  • 远程仓库:是在远程服务器上的Git仓库

    图片2

1.2、git工作流程

  1. 从远程仓库中克隆代码到本地仓库(git clone)
  2. 从本地仓库中checkout代码然后进行代码修改(checkout)
  3. 在提交前先将代码提交到暂存区(add)
  4. 提交到本地仓库。本地仓库中保存修改的各个历史版本(commit)
  5. 修改完成后,需要和团队成员共享代码时,将代码push到远程仓库(push)

图片3

1.3、Git常用的代码托管平台

​ 我们的远程仓库就建立在代码托管平台上,常见的有GitHub,GitLab,还有码云等

  • itHub( 地址:https://github.com/ )是一个面向开源及私有软件项目的托管平台,因为只支持Git 作为唯一的版本库格式进行托管,故名gitHub
  • 码云(地址: https://gitee.com/ )是国内的一个代码托管平台,由于服务器在国内,所以相比于GitHub,码云速度会更快
  • GitLab (地址: https://about.gitlab.com/ )是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务

二、Git常用命令

2.1、环境配置

  • 设置用户信息

    git config --global user.name "name" # 设置git用户名
    git config --global user.name "email"# 设置git邮箱
    
  • 查看用户的配置信息

    git config --list # 查看git的配置
    git config user.name # 查看git的用户名
    git config user.email #查看邮箱
    

    image-20200919105057953

    通过上面的命令设置的信息会保存在C盘用户目录下的.gitconfig文件中

    image-20200919093020372

2.2、获取Git仓库

要使用Git对我们的代码进行版本控制,首先需要获得Git仓库

  • 可以通过clone命令从远程仓库克隆一个到本地

    image-20200919093827404

  • 可以通过init命令在本地初始化一个Git仓库

    image-20200919093900566

通过以上两种方式都可以在本地撞见一个仓库,它会生成一个.git的文件,有这个文件代表着是一个git本地仓库

2.3、工作目录、暂存区和版本库

  • 前面看到的.git隐藏文件夹就是版本库,版本库中存储了很多配置信息、日志信息和文件版本信息等
  • 包含.git文件夹的目录就是工作目录,主要用于存放开发的代码
  • .git文件夹中有很多文件,其中有一个index文件就是暂存区,也可以叫做stage。暂存区是一个临时保存修改文件的地方

图片15

Git工作目录下的文件存在两种状态:

  1. untracked未跟踪状态(未被纳入版本控制)
  2. tracked已跟踪(被纳入版本控制)
    • unmodified 未修改状态
    • modified 已修改状态
    • staged已暂存状态

2.4、本地仓库操作

  1. git status 查看文件状态

image-20200919094935812

我们新建了一个.gitignore文件(可以在这个文件里面配置哪些文件不必纳入版本控制),此时查看文件状态发现.gitignore是未被跟踪状态,也可以使用git status -s 命令简介的显示文件状态

image-20200919095210626

​ 2. git add 将文件添加到暂存区

image-20200919095944281

此时查看再次查看文件状态

image-20200919100041939

  1. git reset 将暂存区的文件取消暂存

我们添加到暂存取得文件并没有提交到本地的仓库,可以通过git reset命令取消暂存,再次查看文件,文件又处于未被跟踪状态.

image-20200919100419666

  1. git commit 将暂存区文件提交到仓库

image-20200919104227996

参数-m的意思是记录提交的日志,想要commit必需要经过add

  1. git rm 删除文件

    image-20200919104143441

    此时显示.gitignore文件已经被删除,但是这只是删除了工作区的文件并没有删除本地仓库的文件。

    将删除操作提交到本地仓库

image-20200919104406634

注意:使用git rm 删除后默认进入暂存区可以直接commit,但是如果在windows中删除则需要add

  1. .gitignore忽略文件

    一般我们总会有些文件无需纳入Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。 在这种情况下,我们可以在工作目录中创建一个名为 .gitignore 的文件

    image-20200919104836504

    7.git log 查看日志记录

    image-20200919104947551

2.5、远程仓库操作

  1. git remote 查看远程仓库

    image-20200919105341768

    如果本地仓库是直接从远程仓库clone的,我们可以看到一个origin 。这是Git克隆的仓库服务器的默认名字。

    如果没有指定远程仓库,则啥也没有

    image-20200919105642320

  2. 添加和断开远程仓库

    git remote add 添加一个新的远程 Git 仓库,同时指定一个可以引用的简写

    image-20200919110239300

    如果想要断开与远程仓库的连接可以使用git remote remove [仓库(origin)]注意:此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库image-20200919110432857

    image-20200919110542263

    远程仓库可以添加多个

    image-20200919110731993

  3. 从远程仓库克隆

    如果你想获得一份已经存在了的 Git 仓库的拷贝,这时就要用到 git clone 命令。 Git 克隆的是该 Git 仓库服务器上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。 当你执行 git clone 命令的时候,默认配置下远程 Git 仓库中的每一个文件的每一个版本都将被拉取下来。

    命令形式:git clone [url]

    image-20200919111619839

  4. 从远程仓库fetch

    git fetch 是从远程仓库获取最新版本到本地仓库,它会将数据放在git文件的object文件里面,我们找不到,它不会自动merge,fetch过后需要使用merge命令将本地仓库的数据和fetch来的数据合并。

    命令形式:git fetch[remote-name] [branch-name]

    ​ git merge[remote-name]/ [branch-name]

    image-20200919113844065

    注意:如果本地仓库不是从远程仓库克隆而来而是init初始化而来。则第一次合并或者提交的时候会出现fatal:refusing to merge unrelated histories,我们需要在命令后面加上–allow-unrelated-histories,表示允许不相关的历史

  5. 从远程仓库pull

    命令形式:git push [remote-name] [branch-name]

    image-20200919130555847

    如果第一次出现出现fatal:refusing to merge unrelated histories,也需要加上–allow-unrelated-histories

  6. 将本地仓库代码推送到远程仓库

    当你想分享你的代码时,可以将其推送到远程仓库。 命令形式:git push [remote-name] [branch-name]

2.6、Git分支

​ 几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离开来,以免影响开发主线。master分支是git仓库的默认分支。

  1. 查看分支

    列出所有本地分支:git branch

    列出所有远程的分支:git branch -r

    列出所有本地分支和远程分支:git branch -a

    image-20200919132645018

  2. 创建分支

    命令格式:git branch [branch_name]

    image-20200919133002897

  3. 切换分支

    使用git checkout [branch_name]可以切换分支,前面的*和绿色就表示当前分支

    image-20200919134215409

    在当前分支下创建一个文件master2.txt并push到远程仓库maste2分支,此时master分支没有master2.txt文件。

    当我们切换到master分支没有master2.txt文件

    image-20200919135958985

    当我们切换到master2分支,发现master2.txt文件

    image-20200919140131733

  4. git合并分支

    命令格式:git merge [branch_name]

    image-20200919143837145

    注意:如果你在两个不同的分支中,对同一个文件的同一个部分进行了不同的修改,Git 就没办法合并它们,同时会提示文件冲突。此时需要我们打开冲突的文件并修复冲突内容,最后执行git add命令来标识冲突已解决

  5. 删除分支

    git branch -d [branch_name]

    如果要删除的分支中进行了一些开发动作,此时执行上面的删除命令并不会删除分支,如果坚持要删除此分支,可以将命令中的-d参数改为-D

    git branch -D [branch_name]

    image-20200919144200156

    如果要删除远程仓库中的分支,可以使用命令git push origin –d [branch_name]

    image-20200919144418787

    image-20200919144406718

    此时远程仓库只剩下master分支,没有master2分支

2.7、Git标签

Git 可以给历史中的某一个提交打上标签,以示重要。 比较有代表性的是人们会使用这个功能来标记发布结点(v1.0 、v1.2等)。标签指的是某个分支某个特定时间点的状态。通过标签,可以很方便的切换到标记时的状态。

  1. 创建标签

    git tag [tag_name]创建一个新的标签

    image-20200919150323085

  2. 列出标签

    git tag查看有哪些标签

    git show [tag_name] 查看标签的详细信息

    image-20200919150436211

  3. 将标签推送到仓库

    git push [remote] [brance] [tag_name]

    image-20200919150852772

    可以看到远程仓库多了一个v1.0标签

    image-20200919150900334

  4. 新建一个分支,指向某个标签

    命令格式:git checkout -b [branch] [tag]

    image-20200919151154501

  5. 删除标签

    git tag -d [tag_name] 删除本地标签

    git push [remote] [branch] :refs/taags/[tag_name] 删除远程标签

    image-20200919151515750

三、Git时光机

3.1、reset和checkout

​ 在工作中,一旦误删了文件或者是把文件弄乱了,我们可以从最近的一个commit版本恢复。git log命令 显示从最近到最远的提交日志,可以见看到我们各个版本的日志每个版本都有一个commit id,其HEAD表示当前版本,HEAD表示上一个版本,HEAD表示上上一个版本,往上100个版本可以写成HEAD加连续100个,也可以写成:HEAD~100。

git log :显示从最近到最远的提交日志

image-20200919165001383

**git log --pretty=oneline:**将只会显示提交的commit id号和对应的注释。

image-20200919165125494

回退到上一个版本

git reset --hard HEAD^

image-20200919165413066

已经成功回退到上一个版本,此时执行以此git log,已经没有第三个版本的信息

image-20200919165510348

此时我们如果想要恢复到第三个版本,我们需要使用 git reflog来查看过的你使用过的每一条命令

image-20200919165727751

执行命令 git reset --hard [commitId]

image-20200919165912466

image-20200919165935022

已经回到第三个版本!

git reset --soft [id] :最近一次提交节点的提交记录回退到暂存区。此时a.txt已经添加到暂存区但是未被提交

image-20200919171710334

git reset --mixed HEAD^ :将最近一次提交节点的提交记录回退到工作区

image-20200919170844761

如果想要将暂存区的内容回退到工作区直接使用git reset 命令。

如果想要清除工作区某个文件的修改可以使用 git checkout – [file_name]命令,git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

3.2、revert

git revert是用于“反做”某一个版本,以达到撤销该版本的修改的目的。比如,我们commit了三个版本(版本一、版本二、 版本三),突然发现版本二不行(如:有bug),想要撤销版本二,但又不想影响撤销版本三的提交,就可以用 git revert 命令来反做版本二,生成新的版本四,这个版本四里会保留版本三的东西,但撤销了版本二的东西。

参考连接:https://blog.csdn.net/yxlshk/article/details/79944535

参考连接:https://www.jianshu.com/p/09dbd8dc7345

版权声明:本文为qq_44134480原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_44134480/article/details/108685200

智能推荐

[UE4]蓝图和C++调用自定义函数

1、C++自定义方法,蓝图调用 UFUNCTION宏是处理将C++函数暴露给反射系统的一些事情,参数BlueprintCallable意味着这个函数可以在蓝图中调用,而后面的目录是必须有的,这样在蓝图中右键点击的时候,我们就可以根据这个目录找到我们需要的函数。 2、蓝图定义方法,C++调用 当我们在蓝图中定义了一系列操作后,我们也想用C++调用,我们利用BlueprintImplementable...

Redis--2.Jedis的介绍和使用

一.概念 Jedis是Redis官方推荐使用的的一个Java连接开发的工具(中间件)。 Jedis主要是集成了redis的一些命令操作,封装了redis的java客户端。 使用Jedis操作Redis数据库,就相当于使用JDBC操作sql_server、Mysql数据库。 二.两种连接方式 1.Jedis对象直连Redis Jedis对象直连方式可以分为五个步骤: 1、导入Jedis的jar包 2...

选择图片上传之后,图片旋转问题解决方案(前端)

图片上传之后,显示为什么会是旋转的呢? 这就要说到图片的 exif 简单来说,Exif 信息就是由数码相机在拍摄过程中采集一系列的信息,然后把信息放置在我们熟知的 JPEG/TIFF 文件的头部,也就是说 Exif信息是镶嵌在 JPEG/TIFF 图像文件格式内的一组拍摄参数,它就好像是相机的日期打印功能一样,只不过 Exif信息所记录的资讯更为详尽和完备。Exif 所记录的元数据信息非常丰富,主...

ApplicationContextAware如何装配applicationcontext

首先看通过实现ApplicationContextAware接口获得applicationcontext的方法: 要知道ApplicationContextAware首先要了解ApplicationContextAwareProcessor ApplicationContextAwareProcessor继承了BeanPostProcessor,即在bean实例化的时候会调用postProcess...

[BZOJ1013][JSOI2008]球形空间产生器sphere(高斯消元)

题目: 我是超链接 题解: 根据题目给出的信息,我们列柿子 (a1−x)2+(b1−y)2=r2(a1−x)2+(b1−y)2=r2 (a2−x)2+(b2−y)2=r2(a2−x)2+(b2−y)2=r2 (a3−x)2+(b3−y)2=r2(a3−x)2+(b3&...

猜你喜欢

【opencv学习之三十六】轮廓特征应用:计算点与轮廓距离

opencv实现了Contours与point的距离关系的计算使用起来很方便,不用自己再进行坐标转换计算了;示例代码如下: 效果如下:...

实验六:MPG音频编码

一、实验原理 音频压缩编码的本质是感知编码,利用感知模型去除不敏感的声音数据,同时保证声音质量不会有明显下降。它采用子带编码技术,根据心理声学模型获得不同子带的听觉掩蔽阈值,并对每个子带的取样值进行动态量化。 1、音频压缩的可能性 (1)声音信号中的“冗余”信息: 频域:非均匀功率密度谱, 低频能量高,高频能量低。 时域:信息冗余度主要表现在幅度非均匀分布,即不同幅度的样值...

隐式 Style–CSS 在反爬虫中的应用

文章作者:「夜幕团队 NightTeam」 - 戴煌金 润色、校对:「夜幕团队 NightTeam」 - Loco 什么是隐式 Style–CSS 先来唠唠什么是 隐式 Style–CSS: CSS中,::before 创建一个伪元素,其将成为匹配选中的元素的第一个子元素。常通过 content 属性来为一个元素添加修饰性的内容。 引用自:https://developer...

Cosmos(ZYNQ)编译运行Linux系统

Author:Gary Data:2019-12-24 Ref: ug1144-petalinux-tools-reference-guide.pdf https://www.cnblogs.com/vacajk/p/6146146.html https://www.cnblogs.com/likaiwei/p/10223354.html https://blog.csdn.net/mcupro/...

(93)Part23-Nuxt.js服务器端渲染-06【作业】-上传到码云

一、创建代码仓库 1、新建仓库 2、得到代码仓库的地址 二、VSCode连接gitee 1、打开项目 使用VSCode打开项目文件夹 guli-site 2、初始化存储库 3、加入本地代码仓库 4、提交代码 5、推送到远程仓库 Ctrl+Shift+~,进入到VSCode终端,在guli-site文件夹内执行下面的命令...