关于Git的入门教程(附GitHub和Gitee的使用方法)

一. Git 概述

  • Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从小型到大型的各种项目。
  • Git易于学习、占地面积小、性能极快。它具有廉价的本地库,方便的暂存区域和多个工作流分支等特性。其性能优于Subversion、CVS、Perforce和ClearCase等版本控制工具。

1.1   何为版本控制 

  • 版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
  • 版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本,方便版本切换。

1.2   为什么需要版本控制 

  • 从个人开发过渡到团队协作。

 1.3   版本控制工具

1.3.1   集中式版本控制工具

CVS、SVN(Subversion)、VSS……

  • 集中化的版本控制系统诸如CVS、SVN等,都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连接到这台服务器,取出最新的文件或者提交更新。多年以来这已经成为版本控制系统的标准做法。

优缺点: 

  • 优点:每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌握每个开发者的权限,并且管理一个集中化的版本控制系统,要远比在各个客户端上维护本地数据库来的轻松容易。
  • 缺点:中央服务器的单点故障期间,谁都无法提交更新,也就无法协同工作。

1.3.2   分布式版本控制系统

Git、Mercurial、Bazaar、Darcs……

  • 像Git这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
  • 分布式的版本控制系统出现之后,解决了集中式版本控制系统的缺陷:
  1. 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行)
  2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)

1.4   Git简介

1.5   Git工作机制 

  • 工作区:代码存放的磁盘的目录位置 

1.6   Git 和代码托管中心

代码托管中心是基于网络服务器的远程代码仓库,一般我们简单称为远程库。(从本地库推送(push)到远程库)

1.6.1   局域网

        GitLab(基于局域网)

1.6.2   互联网

        Github(基于外网)

        Gitee码云(基于国内网站)

二. Git 安装

1.搜索git官网,会有最新版git下载链接Giticon-default.png?t=N7T8https://git-scm.com/

 2.点击Download for Windows,进入如下界面中点击下载(自动下载与电脑位数匹配的程序)

 3.下载之后双击安装

①GNU霸王条款,无脑同意next就行

②安装路径(最好放在没有中文且没有空格的路径里面)

 

③Git选项配置,推荐默认配置,直接next

 ④后面一直next就行了

4.如何看是否安装成功

  • 右击桌面选择显示更多选项,有下面的选择则安装成功

 三. Git 常用命令

命令名称作用
git config --global user.name   用户名设置用户签名
git config --global user.email   邮箱设置用户签名
git init初始化本地库

git status

查看本地库状态
git add   文件名添加到暂存区
git commit -m "日志信息"   文件名提交到本地库
git reflog查看历史记录
git reset --hard   版本号版本穿梭

 3.1   设置用户签名 

3.1.1   基本语法

git config --global user.name   用户名

git config --global user.email   邮箱

  1. 打开open git bash here
  2. 按照基本语法设置用户名和邮箱(实际和虚拟的皆行)
  3. 设置好了之后去c盘用户文件夹找到.gitconfig打开,显示你设置的用户名和邮箱即为成功。

 3.1.2   说明

        签名的作用是区分不同的操作者身份。用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户签名,否则无法提交代码。

        注意:这里设置的用户签名和邮箱与将来登录GitHub(或其他代码托管中心)的账号没有任何关系。

3.2   初始化本地库

3.2.1   基本语法

git  init

3.2.2   案例实操 

如图,初始化成功后该文件夹就会出现一个 .git 的文件夹。(如果没有,点击文件夹上方查看打开隐藏项目)

  • Windows系统有D:、C:的盘符存在,所以在文件夹中进入git bush here比较好。
  • git bash here界面里面的命令操作和Linus系统是一样的。

3.3   查看本地库状态

3.3.1   基本语法

git status

3.3.2   初次查看:工作区没有任何文件

  • On branch master  // 当前本地库位于分支master
  • No commits yet  //目前还没有提交过任何东西
  • nothing to commit   //没有东西可以提交

3.3.3   新增文件 & 再次查看状态(检测到未追踪的文件)

  • untracker files   //未被追踪的文件(只存在工作区域,git并未追踪 )
  • 使用git add去追踪文件

3.4   添加暂存区

 3.4.1   基本语法

git add name(这个name是你要添加的文件或者文件夹的名称)

3.4.2   查看状态(检测到暂存区有新文件)

文件从红色字体变成了绿色字体,说明git已经追踪(知道)了这个文件。

使用“git rm --cached 文件名”可以从暂存区删除你要删除的文件。

3.5   提交本地库

3.5.1   基本语法

git commit -m "日志信息" name(文件名)

3.5.2   查看提交(没有文件需要提交)

  • git bash窗口中第三行显示的就是你commit成功的状态,后面 test hello world 就是基本语法中的“日志信息”。

  • git bush窗口第四行提示:1个文件被改变,7行内容被插入。

3.6   修改文件

3.6.1   基本语法

  • vim name(文件名)
  • 也可以直接打开文件进行修改,不需要在 git bash here 窗口通过指令进行修改。

文件已被修改(相当于新文件),需要从工作区再次add到暂存区,并且需要commit。

3.7   历史版本(版本穿梭)

3.7.1   查看历史版本

  • git reflog   查看版本信息
  • git log   查看版本详细信息

3.7.2   版本穿梭

git reset --hard 版本号(上图中黄色的字符串就是版本号,分为详细版本号和精简版本号)

穿越之后,你的指针就指向你的穿越目标所对应的版本,并修改时从指针所指为基础开始修改。

附:cat 文件名——可以查看文件内容

四. Git分支操作 

  • 从右向左看!!!

4.1   什么是分支?

        在版本控制过程中,同时推进多个任务,为每个任务,我们就可以创建每个人物的单独分支。使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单理解为副本,一个分支就是一个单独的副本。(分支底层其实也就是指针的运用)

4.2   分支的好处

        同时并行推进多个功能开发,提高开发效率。

        各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。

4.3   分支的操作

命令名称作用
git branch 分支名创建分支
git branch -v查看分支
git checkout 分支名切换分支
git merge 分支名把指定的分支合并到当前分支上

4.3.1   查看分支

①基本语法

git branch -v

②实操案例

4.3.2   创建分支

①基本语法

git branch 分支名

②实操案例(创建一个test分支,图中我的test分支有内容是因为他会把主分支master的内容复制了一份)

!git后面括号内有个蓝色的master,说明当前分支仍处于master分支

4.3.3   切换分支

①基本语法

git checkout 分支名

②实操案例(括号内蓝色的分支为test)

4.3.4   修改分支

①基本语法:vim 文件名

②修改

细节讲解:Windows下 git commit 后会进入vim界面。 输入小写字母 i ,此时进入编辑模式,可以输入你想输入的内容。 按下 esc 键,此时退出编辑模式,输入英文语法下的冒号 : ,再输入 wq 即可保存退出

  • 可以看到我的代码已经经过了修改
③查看本地库状态(git status)

第一行on branch test说明此时不在主分支master上,然后修改过后并没有add、commit、push等行为,显示红色(具体细节往前翻至3.3、3.4、3.5)

add后

commit后并查看(cat)

4.3.5   合并分支

切换会原主线master发现并没有修改内容,仍然是原内容

①基本语法

git merge 分支名

②实操案例

(文件内容已修改,这里test分支是基于原master分支上进行修改,因此合并十分顺利,没有产生冲突,具体内容看下一小节)

4.3.6   产生冲突

①冲突产生的原因

        合并分支时,两个分支在同一文件的同一个位置有两套完全不同的修改。Git无法替我们决定使用哪一个。必须人为决定新代码的内容。

②制造冲突

先修改master主线的内容

再修改test支线的代码内容

③产生冲突

(第二行显示冲突;第三行显示自动合并失败)

注意:下一行代码()中提示werging说明正在合并中

④手动合并

vim打开文件后

  • <<<<<<< HEAD 表示当前分支

(这中间是当前分支的修改内容)

  • ======= 分界线(楚河汉界)

(这中间是产生冲突的分支修改内容)

  • >>>>>>> test 表示与主线产生冲突的分支

手动合并很简单啊,只需要把你想要留下的部分留下,不想要的删除,之后再把<<<<=====>>>>这些特殊符号删除即可(这里保持代码行数不变)

这里我删除了三条分界线,第一部分的return和第二部分的printf,然后esc,wq退出即可。

4.3.7   解决冲突

由4.3.6 手动合并之后,我们还需要两步操作(add、commit)

①add(添加到暂存区)

②commit(执行提交)

注意注意!!!

        此时使用git commit命令时不能带文件名!!!

这里我尝试commit时加上了文件名,然后给git报错:不知道commit哪一个分支里面的demo.c

不带文件名之后成功合并,可以看下一行代码()中已经没有merging,而是master

!!!这时候的主线还在master上,所以手动合并的结果在master上显示,并不会在test中有所修改。

4.4   创建分支和切换分支图解

master 

 

创建hot-fix(热修)分支【热修是常用分支名称,本人为了偷懒就写了一个test】 

 

将hot-fix分支合并至master主线 

 

总结:master、hot-fix其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD决定的。所以创建分支的本质就是多创建一个指针。

        HEAD如果指向master,那么我们就在master分支上;如果指向hot-fix,我们就在hot-fix分支上。(在.git里面找到HEAD文件可以查看当前指针所指向分支)

        所以啊,所谓的切换分支,其实就是移动HEAD指针指向不同的地方。 (wok!真心累死我了,爆肝完第四章)

五. Git 团队协作机制(内附武林秘籍)

这里我们感谢岳不群、令狐冲以及东方不败的友情客串~ 

5.1   团队内协作

        岳不群:华山派掌门人,作为掌门他要开创一门华山剑法。令狐冲:岳不群的大弟子。

东方不败:就当她是令狐冲的“good friend”(手动滑稽)。代码托管中心:可以看作一个收录各种武林秘籍的庞大组织(哪本爽文小说没个组织庞大的情报商业机构~)。

        所以他先创建本地库,在本地库中创建了一个架构,我们称为“华山剑法”。华山剑法创建好了之后,岳不群首先想要给大弟子(令狐冲)学习并让大弟子帮助他完善。

        于是岳不群(本地库)就利用push(推送)把华山剑法推送到藏经阁(远程库:github\gitee)中。令狐冲(另一个本地库)去藏经阁找(clone克隆)武林秘籍来学习。

        欸,我们发现啊令狐冲不愧是武术天才,简单的学习之后他就发现这剑谱很厉害,但总觉得不够完美。于是令狐冲就日夜钻研琢磨,最后完成了“华山剑法”Plus,再次放回(Push)[注意这里的push需要权限,就是你能往藏经阁放东西的权限,我们称这个权限为拜师(岳不群把令狐冲加到自己的团队里面)]藏经阁。这时候岳不群就可以去借阅(pull拉取)“华山剑法”Plus并学习(更新自己的本地库)

5.2   跨团队协作 

        至此,师徒二人继续完善“华山剑法”并进入顿悟模式。但此刻很明显两人已经尽可能的完善却达不到预期。于是 二人决定去寻求他人帮助,令狐冲找到了“好朋友”东方不败(团队外的人)帮助师徒二人修改秘籍(为什么要跨团队协作呢?这里嗷我们看:东方不败作为日月神教的CEO,不会加入到小小的华山派,于是只能跨团队协作),把华山剑法改为辟邪剑谱。

        岳不群首先把华山剑法fork到东方不败的藏经阁(远程库)里,然后东方不败把秘籍从藏经阁中取出(clone)拿到自己手上(本地库)。修改完成后得到(辟邪剑法/华山剑法Plus plus版),先放回(Push)自己宗门的藏经阁中,但是这里不能直接fork回去,需要发送一个Pull request(拉取请求)给岳不群,告诉他剑谱修改已经完成。但是不是你说增强就增强了,我得先看看你的修改成果是不是比我更厉害(审核),看完之后发现确实变得更牛逼了,于是岳不群把东方不败修改加强的地方与原版对比合并(merge),放回藏经阁中,然后岳不群再从藏经阁中取出(Pull)Plus plus版供自己和大弟子令狐冲修炼。

六. GitHub 操作 

GitHub网址:GitHub: Let’s build from here · GitHub

ps:全球最大同性交友平台,技术宅男的天堂,新世界的大门,你还在等什么啊?(国内自行挂梯子上GitHub)

理论学习……(仅我一人孤军奋战,实在不好找队友协作学习) 

6.1   创建远程仓库

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

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

相关文章

三分钟实现MQTT协议网关网口连接西门子SMART200PLC上传阿里云服务器

MQTT协议网关网口连接西门子SMART200PLC操作说明v1.4 目录 一. 使用流程 二. 准备工作 2.1 需要准备如下物品 2.2 LF220网关准备工作 2.3 PLC准备工作 2.4 电脑的准备工作 2.5 MQTT服务器准备工作 三. 阿里云IoT平台配置步骤 3.1 创建产品 3.2 添加设备 …

10.22A*算法,华容道,状态压缩

A* P1379华容道 问题是要从初始布局用最少的步骤到目标布局&#xff0c;每次只能动0周围的格子&#xff0c;就是华容道&#xff1b; 怎么用算法的思路解决&#xff1f; 状态压缩思路 每个数字就代表当前的状态&#xff0c;队列和map函数都记录的是当前的状态数&#xff0c;…

FileUpload控件上传文件时出现 不支持给定路径的格式.的解决方法

正常代码&#xff0c;部署到server 2012时&#xff0c;在上传音频mp3文件时&#xff0c;显示错误“不支持给定路径的格式”&#xff0c;上传控件使用FileUpload控件&#xff1a; 因为程序之前是正常的&#xff0c;因此应该不是程序的问题。 上传时&#xff0c;发现在选择文件时…

深入浅出排序算法之归并排序

目录 1. 归并排序的原理 1.1 二路归并排序执行流程 2. 代码分析 2.1 代码设计 3. 性能分析 4. 非递归版本 1. 归并排序的原理 “归并”一词的中文含义就是合并、并入的意思&#xff0c;而在数据结构中的定义是将两个或者两个以上的有序表组合成一个新的有序表。 归并排序…

使用Packstack安装器安装一体化OpenStack云平台

【实训目的】 初步掌握OpenStack快捷安装的方法。掌握OpenStack图形界面的基本操作。 【实训准备】 &#xff08;1&#xff09;准备一台能够安装OpenStack的实验用计算机&#xff0c;建议使用VMware虚拟机。 &#xff08;2&#xff09;该计算机应安装CentOS 7&#xff0c;建…

电解电容寿命与哪些因素有关?

电解电容在各类电源及电子产品中是不可替代的元器件&#xff0c;这些电子产品中由于应用环境的原因&#xff0c;使它成为最脆弱的一环&#xff0c;所以&#xff0c;电解电容的寿命也直接影响了电子产品的使用寿命。 一、电解电容失效模式与因素概述 铝电解电容器正极、负极引出…

【Redis安装】Ubuntu和Centos

此处安装的是 Redis5 在 Ubuntu 系统上 切换到 root 用户下&#xff0c;su 命令切换使用 apt 可以搜索 redis 相关软件包 apt search redis使用 apt 命令安装 redis apt install redis手动修改配置文件 redis.conf cd /etc/redis/ vim redis.conf修改以下两处 重启服务器 …

【Opencv】OpenCV使用CMake和MinGW的编译安装出错解决

编译时出现的错误&#xff1a; mingw32-make[1]: *** [modules/core/CMakeFiles/opencv_core.dir/all] Error 2 Makefile:161: recipe for target ‘all’ failed mingw32-make: *** [all] Error 2解决方法&#xff1a; 根据贴吧老哥的解答&#xff0c;发现是mingw版本有问题导…

Java基础篇 | Java8流式编程

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a; Java从入门到精通 ✨特色专栏&#xf…

虚拟机使用linux常用问题(虚拟机操作系统:ubuntu 22.04LTS)

1.虚拟机连接外网 ubuntu解决网络连接的解决方案 CentOS7联网问题解决 明明连接好了但是没有网络的情况 2.虚拟机磁盘扩容 相关博客 利用gparted工具时,直接将unallocated空间的前一个位置的磁盘resize,将unallocated的空间全部覆盖 3.虚拟机与本机共享文件 安装vmtools 设…

Elasticsearch的聚集统计,可以进行各种统计分析

说明&#xff1a; Elasticsearch不仅是一个大数据搜索引擎&#xff0c;也是一个大数据分析引擎。它的聚集(aggregation)统计的REST端点可用于实现与统计分析有关的功能。Elasticsearch提供的聚集分为三大类。 度量聚集(Metric aggregation)&#xff1a;度量聚集可以用于计算搜…

嵌入式实时操作系统的设计与开发(互斥量学习)

一个无论多么小的系统&#xff0c;都会有大系统的缩影&#xff0c;就像俗话说“麻雀虽小五脏俱全”。 嵌入式实时操作系统中除了基本调度机制&#xff08;创建线程、调度线程、挂起线程等&#xff09;&#xff0c;事件处理机制&#xff08;中断管理、时钟管理&#xff09;、内…

【c++】运算符重载实例

重载自增自减运算符 Intger num(2); num; num;对自增运算符的重载要区分前置和后置。在重载之前需要思考一个问题&#xff0c;num是返回一个临时变量还是num对象的本体。 为了解决这个问题可以考虑实现一个Inc_()函数和_Inc()函数分别模仿后置和前置的行为 Integer Inc_(){i…

YOLOv5算法改进(20)— 如何去写YOLOv5相关的论文(包括论文阅读+规律总结+写作方法)

前言:Hello大家好,我是小哥谈。最近一直在阅读关于YOLOv5的相关论文,读着读着我发现一条可以发论文的规律,特此简单总结一下,希望能够对同学们有所启迪!🌈 前期回顾: YOLOv5算法改进(1)— 如何去改进YOLOv5算法

IO文件操作

小王学习录 今日鸡汤文件一. 文件路径1. 绝对路径2. 相对路径二. 文件类型三. 文件操作1. 文件系统操作2. 文件内容操作(字节流)1. 读文件2. 写文件3. 释放资源(.close)3. 文件内容操作(字符流)重识(System.in)今日鸡汤 光阴如骏马加鞭, 日月如落花流水. 文件 狭义上的文件:…

欧拉图和哈密顿图

欧拉图 在连通图G中&#xff0c;经过G的每条边一次且仅一次的通路&#xff0c;称为欧拉通路若欧拉通路为回路&#xff0c;则称为欧拉回路含有欧拉回路的图称为欧拉图有欧拉通路则G可以一笔画出有欧拉回路则G是连通的且无奇点&#xff08;欧拉图无奇点&#xff09; 哈密顿图 …

【MATLAB源码-第56期】基于WOA白鲸优化算法和PSO粒子群优化算法的三维路径规划对比。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 1.粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;简称PSO&#xff09;是一种模拟鸟群觅食行为的启发式优化方法。以下是其详细描述&#xff1a; 基本思想&#xff1a; 鸟群在寻找食物时&#xff0c;每只鸟都…

Kafka简单入门02——ISR机制

目录 ISR机制 ISR 关键概念 HW和LEO Java使用Kafka通信 Kafka 生产者示例 Kafka 消费者示例 ISR机制 Kafka 中的 ISR&#xff08;In-Sync Replicas&#xff09;机制是一种用于确保数据可靠性和一致性的重要机制。ISR 是一组副本&#xff0c;它包括分区的领导者&#xff…

【WinForm详细教程一】WinForm中的窗体、Label、TextBox及Button控件、RadioButton和CheckBox、ListBox

文章目录 1.WinForm文件结构2. 窗体的常用属性、方法与事件2.1 常用属性&#xff08;可直接在属性中设置&#xff09;2.2 常用方法2.3 常用事件 3.Label、TextBox及Button控件4.RadioButton和CheckBox5.ListBox&#xff08;列表框&#xff09; 1.WinForm文件结构 .sln文件 &am…

NFTScan | 10.16~10.22 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2023.10.16~ 2023.10.22 NFT Hot News 01/y00ts&#xff1a;迁移回以太坊的跨链桥已上线&#xff0c;将承担第一天所有 Gas 费 10 月 16 日&#xff0c;y00ts 发推称&#xff0c;将 y00…