一篇文章看懂Git是什么以及如何简单的上手Git

本文来自DotNET技术圈

作者:显杰

1.Git是什么

Git是目前世界上==最先进的分布式版本控制系统==

什么是版本控制系统?

好比设计师从开始设计第一个版本的设计稿开始:

Demo => Demo1 => Demo2 => ... =>Demo1001 => Demo最终版本 => Demo最终确认版本!

但是改了这多设计师也不记得每个版本之间都改了些啥

如果能有一个软件,能每次记录文件之间的改动,并且还能协调多个用户编辑,所以就出现了Git

==Git是分布式版本控制系统,那么他们就没有中央服务器的,每个人的电脑就是一个完整的版本库==,这样,工作的时候就不需要联网了,因此版本都是在自己的电脑上,既然每个人的电脑都有一个完整的版本库,那么多个人如何协作呢,比如自己在电脑上,更改了文件A,其他人也在电脑上改了文件A,这时候,你们两之间只需要把各自的修改推送给对方,就可以互相看到对方的修改了


2.Git与Github的区别

==Git简单的说其实就是一个软件==,用于记录一个或若干个文件内变化,以便将来查询特定版本修订情况的软件

==Github(https://www.github.com)是一个为用户提供Git服务的网站==,就是一个可以存放代码的地方,当然可以放的不只是代码,Github除了提供管理Git的web界面外,还提供了订阅,关注,讨论组,在线编辑器等丰厚的功能

3.Git的安装

在这里插入图片描述

4.Git的使用

1. 本地仓库:

1.1 工作流程

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

工作区写好的文件通过工作区转移到暂存区(相当于背包)如何一次性把暂存区的文件转移到Git仓库,为什么要有一个暂存区呢,因为不可能工作区的文件一次次的从工作区把文件直接运到Git仓库,而因该一次性全部运过去,减少了消耗嘛


1.1.2 本地仓库操作 什么是仓库呢?仓库有名版本库,英文名是Repository,我们可以简单理解成是一个目录,用于存放代码的,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改,删除等操作Git都等跟踪到。安装好后,首次使用需要先进行全局配置桌面空白地方右键,点击“Git Bash Here” 打开Git命令行窗口
==Git config -global user.name "用户名" Git config -global user.email "邮箱"==

在这里插入图片描述

当我们需要Git去管理某个新项目/已经存在项目的时候,就需要创建仓库了,注意:创建仓库的时候使用的目录不一定要求是空目录,选择一个非空目录也是可以的。A.创建空目录

mkdir 文件名

B.在命令行中进入项目目录

cd 文件路径/文件名称

C git文件夹初始化到选中的文件夹中

git init

在这里插入图片描述

D Git常用指令操作

查看当前状态:git status [非必要]添加到缓存区:git add 文件名

    说明:git add指令,可以添加一个文件,也可以同时添加多个文件。     语法1:git add 文件名
语法2:git add 文件名1 文件名2 文件名3 …
语法3:git add . [添加当前目录到缓存区中]
提交至版本库:git commit -m "注释内容"
在后续对于文件(可以操作1个或多个)操作之后,重复使用 git add与git commit指令即可

1.版本回退 版本回退分为两步骤进行操作:

查看版本,确定需要返回的时刻点:指令: Git log 和 Git log --pretty=oneline

效果如下

在这里插入图片描述

)

在这里插入图片描述

回退操作指令: Git reset --hard 版本号

如果,回到过去之后,要想再回来到之前最新的版本的时候,这需要使用指令,得到最新的commit id。指令:

get reflog

在这里插入图片描述

**小结:**

        i. 想要回到过去,必须先得到 commit id,然后通过 git reset -hard 进行回退 
ii. 想要回到未来,需要先使用 git reflog 查看历史记录,得到最新的commit id;
iii.在写回退指令的时候 commit id可以不用写全,git自动识别,但是也不能写太少,至少需要写前4位字符

1.远程操作Github 3.1. 两种常规使用方式 ==基于http协议==1.创建空的目录Stop2.使用clone指令克隆线上仓库到本地 语法:git clone

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

3..在仓库上做对应的操作(提交暂存区,提交本地仓库,提交线上仓库,拉取线上仓库) 提交到线上仓库指令:

git push

在这里插入图片描述

在首次往线上仓库shop提交内容的时候出现了403的致命错误,原因是因为不是任何人都可以往我这儿线上仓库提交内容,必须需要鉴权需要在.git 里面 config里面进行修改

在这里插入图片描述

格式为:账号:密码@。如果看到如下则成功,可以看到github中文件已经增加

在这里插入图片描述

拉取线上仓库指令:

git pull

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

提醒: 在每天工作的第一件事就是先 git pull 拉取线上最新的版本,每天下班前要做的是 git push 将本地代码提交到线上仓库中


==基于ssh协议== 该方式与前面的https方式相比,只是影响github对于用户的身份鉴权方式,对于git的具体操作(如提交本地,添加注释,提交远程等操作)没有任何影响。

 1. 生成公私钥对指令(需先自行安装OpenSSH)     ssh-keygen -t rsa -C "注册邮箱"     ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191128131801924.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMjUxNTk2,size_16,color_FFFFFF,t_70) 2. 上传公钥文件内容(id_rsa.pub) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191128131841658.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMjUxNTk2,size_16,color_FFFFFF,t_70) 3. 继续克隆,完成http一样的操作 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191128131926803.png)
在这里插入图片描述

1.分支管理 什么是分支?

在这里插入图片描述

在版本回退的时候,每次提交后都会有记录,Git把他们串成时间线,形成类似于时间轴的东西,这个时间轴就是一个分支,我们称之为==master分支(主分支)==分支相关指令:==1.查看分支:git branch==

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191128132210631.png)

==2.创造分支:git branch 分支名==

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191128132336987.png)

==3.切换分支:git checkout 分支名==

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191128132414201.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019112813242214.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/20191128132430693.png)

当我切换到master的时候

在这里插入图片描述

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191128132454956.png)

发现并没有修改对于新分支可以使用==git checkout -b 分支名== 指令来切换分支 -b 表示创建并切换,相当于2个操作==4.分支并和指令 git merge 分支名==

![在这里插入图片描述](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9pbWctYmxvZy5jc2RuaW1nLmNuLzIwMTkxMTI4MTMyNzQzOTYxLnBuZw?x-oss-process=image/format,png)

当我合并dev的时候 ,发现文件就进行整合,已经有修改后的一行。

在这里插入图片描述

== 5. 删除分支 git branch -d 分支名== 删除分支之前,先要退出到要删除的分支(不然删除不掉的)

在这里插入图片描述

2.冲突的产生于解决 比如,我下班后已经push代码到线上,走了,而我之后,有同事A在线上修改了代码,多加了一行

在这里插入图片描述

但是第二天,上班我本机代码,并不会显示同事修改的,但是我又在本机增加了一行。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191128133300503.png)

当我第二天下班后,准备将我写的代码去push后,就会发现。

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

就会提示我,先要我pull一下,得到数据再提交。==【冲突解决的办法】==先git pull

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

打开冲突文件,解决冲突 解决方法:需要和同事(谁先提交的)进行商量,看代码如何保留,将改好的文件再次提交即可

在这里插入图片描述

5.忽略文件

场景:在项目目录下有很多万年不变的文件目录,例如Css,js,images等,或者还有以谢目录即使有变动,我们也不想让其提交到远程仓库的文档,此时我们可以使用“忽略文件”机制来实现

忽略文件需要新建一个==名为.gitignore的文件==,该文件用于申明忽略文件或不忽略文件的规则,规则对当前目录及其子目录生效。

注意:该文件因为没有文件名,没办法直接在windows目录下直接创建,可以通过命令行GitBash来==touch XXX== 创建

在这里插入图片描述

常见规则写法有如下几种:| 规则写法 | 效果 | ---- | ---- | | /mtk | 过滤整个文件夹 | | *.zip | 过滤所有.zip文件 | | /mtk/do.c | 过滤某个具体文件 | | !index.phx | 不过滤具体某个文件 |

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/312815.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[翻译] 使用 Serverless 和 .NET Core 构建飞速发展的架构

作者:Samuele RescaServerless 技术为开发人员提供了一种快速而独立的方式将实现投入生产。这种技术在企业的技术栈中日益流行,自 2017 年以来,它一直是 ThoughtWorks 技术雷达的实验级别的技术[译注:技术雷达是 ThoughtWorks 每半…

经典排序算法(7)——堆排序算法详解

堆排序(Heap sort)是指利用堆(最大堆、最小堆)这种数据结构所设计的一种排序算法。堆是一个完全二叉树的结构,并同时满足如下性质:即子结点的键值或索引总是小于(或者大于)它的父节点…

经典排序算法(8)——归并排序算法详解

归并排序(Merge sort),是创建在归并操作上的一种有效的排序算法,效率为O(nlog n)。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。 一、算法基本思…

祝贺王远当选为中国区第二位 Teams MVP

今天一上班就传来喜讯,Microsoft Teams 大中华区技术社区专家委员会成员之一的王远成功当选了2020-2021年度微软最有价值专家(MVP),这是对他在基于Office 365的音视频会议系统(尤其是在Microsoft Teams)方面的深入研究…

经典排序算法(9)——桶排序算法详解

桶排序(Bucket sort)或所谓的箱排序,并不是比较排序,它不受到 O(nlogn) 下限的影响。 一、算法基本思想 (1)基本思想 桶排序工作的原理是将数组分到有限数量的桶子里,每个桶子再个别排序&#x…

[原]排错实战——使用process explorer替换任务管理器

前言 一般,我们会使用任务管理器查看系统中有哪些进程在运行,强制杀掉某个进程。可是系统自带的任务管理器功能有限,process explorer是一个功能更强大的工具。它可以让我们查看更多更详细的信息( 比如查看某个进程的父进程&#…

ABP vNext中使用开源日志面板 LogDashboard

ABP vNext 使用 logdashboard本文示例源码:https://github.com/liangshiw/LogDashboard/tree/master/samples/abpvnextABPABP是aspnetcore3.0的开源web应用程序框架,非常适合现代web应用程序。有关ABP的更多内容可以查看官方文档Logdashboard可以直接在基…

经典排序算法(10)——基数排序算法详解

基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。 一、算法基本思想 (1)基本思想 基数排序是基于桶排序来实现。通过键值的部分信息&#…

经典排序算法(11)——计数排序算法详解

计数排序(Counting sort)是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(nk)(其中k是整数的范围),快于任何比较…

GitHub Actions,卧槽!牛批!

“ 阅读本文大概需要 19 分钟。 ”前段时间我更新了我的分布式爬虫管理框架—— Gerapy(话都说到这儿了打个广告,跟繁琐的命令行说拜拜!Gerapy分布式爬虫管理框架来袭!,哇,哇,就是,哇…

平衡二叉树AVL详解

一、平衡二叉树的定义 平衡二叉树(Balanced Binary Tree)又被称为AVL树,它且具有以下性质: (1)它是一棵空树或它的左右两个子树的高度差的绝对值不超过1; (2)并且左右两个…

【壹个小技巧】一看就会的CI/CD :Github Actions

什么是 CI/CD?我这里先不说概念,先说一个平时开发的场景问题:我们平时开发一个项目,经常会遇到这些“小”问题:就是如何保证自己的项目是正确的,至少拿给别人的时候,可以编译运行的?或者说多人…

Hyper-V虚拟机自动添加检查点和导出备份

背景说明笔者使用Hyper-V在内部搭建了大量的环境和系统,比如:k8s内部集群Azure Devops Server(TFS>VSTS>Azure Devops Server)SharePoint…大部分基本上都是用于内部研究、测试等场景,但是为了避免很多麻烦,必要的备份还是必…

哈夫曼树详解

一、哈夫曼树的定义 (1)简单路径长度 所谓树的简单路径长度,是指从树的跟节点到每个节点的路径长度之和。 完全二叉树是简单路径长度更小的二叉树。 (2)加权路径长度 所谓树的加权路径长度,是指树中所以带…

深入理解.NET Core的基元(三) - 深入理解runtimeconfig.json

原文:Deep-dive into .NET Core primitives, part 3: runtimeconfig.json in depth作者:Nate McMaster[1]译文:深入理解.NET Core 的基元(三) - 深入 runtimeconfig.json作者:Lamond Lu前情回顾深入理解.NE…

B-树、B+树、B*树详解

一、B树 B树是一种多路搜索树(并不是二叉的),性质如下: 1、定义任意非叶子结点最多只有M个儿子;且M>2; 2、根结点的儿子数为[2, M]; 3、除根结点以外的非叶子结点的儿子数为[M/2, M]&#…

微软正在开发基于Rust的安全编程语言

此前,微软表示正探索将 Rust 作为 C 和 C 的安全替代方案,并且也对外展示了使用 Rust 重写 Windows 组件的体验。根据微软的说法,Rust 是一种从根本上考虑安全性的编程语言,他们将尝试使用 Rust 重写各种产品,因为在过…

堆树(最大堆、最小堆)详解

一、堆树的定义 堆树的定义如下: (1)堆树是一颗完全二叉树; (2)堆树中某个节点的值总是不大于或不小于其孩子节点的值; (3)堆树中每个节点的子树都是堆树。 当父节点的键…

HttpClientFactory日志不好用,自己扩展一个?

前言.NetCore2.1新推出HttpClientFactory工厂类, 替代了早期的HttpClient,并新增了弹性Http调用机制 (集成Policy组件)。替换的初衷还是简单说下:① using(var client new HttpClient()) 调用Dispose()方法,并不会很快释放底层So…

树、二叉树简介

一、树的定义 树是由n(n>1)个有限节点组成一个具有层次关系的集合,它有如下特点: 1、每个节点有零个或多个子节点; 2、没有父节点的节点称为根节点; 3、每一个非根节点有且只有一个父节点; 4…