教你简单学git(从零基础到进阶)

news2024/11/17 22:30:01

前言

什么是Git?

当你刚刚接触到程序开发行业,别人通常都会对你说:git就是用来保存代码项目的,防止代码丢失。

是这个道理没错,但是并不准确。

Git是一个分布式版本管理系统,是为了更好地管理Linux内核开发而创立的。

Git可以在任何时间点,把文档的状态作为更新记录保存起来。因此可以把编辑过的文档复原到以前的状态,也可以显示编辑前后的内容差异。

简单的说:

Git能够保存不同时间提交的文件,知道每个保存阶段的修改内容,保存文件的人员信息,根据对应信息可以自己决定是需要保存、恢复到某个时间点的文件状态,或者是更新等操作

为什么需要Git?

不单单是代码程序项目,就以我们常见的txt文件举例:

要把文档还原到编辑前的状态,大家都是怎么做的呢?

最简单的方法就是先备份编辑前的文档。

使用这个方法时,我们通常都会在备份的文档名或目录名上添加编辑的日期。但是,每次编辑文档都要事先复制,这样非常麻烦,尤其是修改了东西越多,保存的备份文件越多,导致想恢复到指定修改的文件的内容,也很容易出错。

再加上,如果毫无命名规则的话,就无法区分哪一个文档是最新的了。而且,如果是共享文件的话,应该加上编辑者的名字。还有,那些文档名字没有体现修改内容。

另外,如果两个人同时编辑某个共享文件,先进行编辑的人所做的修改内容会被覆盖,相信大家都有这样的经历。

Git版本管理系统就是为了解决这些问题应运而生的。

准备工作

Git工具安装

为了能够在你的本机进行Git的操作,你需要先安装一个Git工具
图标长这样
在这里插入图片描述
Git工具下载

这里给大家推荐Git工具一个安装教程
Git工具安装教程

当下载安装完成之后

在桌面鼠标右键会出现
在这里插入图片描述
Git GUI Here
Git Bash Here
通常情况下,点击Git Bash Here通过命令行进行git的管理

不过,需要一提的是,当你安装了Git工具,在安装过程中勾选添加到path进行配置git后,
就可以直接通过cmd命令行进行执行git命令

新建仓库和Git工具账号登录

首先在Giteegithub任意一个gitee网址创建账号
在登录的情况下,创建一个仓库(以下以gitee举例)
点击+号,点击新建仓库
在这里插入图片描述

然后输入仓库名称、介绍,初始化仓库,点击创建即可

在这里插入图片描述

完成后,点击个人主页–>仓库,查看创建的仓库

在这里插入图片描述

点击去刚刚创建的仓库,点击克隆,复制git地址

在这里插入图片描述
然后自己选择一个文件夹或者创建一个新文件夹,在该文件夹鼠标右键,点击git工具Git Bash Here
鼠标右键输入如下

git clone git仓库地址

即可将仓库克隆到自己的本地文件夹

当你第一次克隆的时候,一般会跳出来需要登录,直接输入你克隆项目的账号和密码即可

Git工具账号切换

当你工作时间比较长久之后,可能你不是从一个git网站上进行克隆项目,但是不登录,
进行提交git代码会导致没有权限操作的问题,这个时候就需要切换账号了

切换账号命令
git config --global user.name "用户名"
git config --global user.email "注册git的邮箱"
查看用户名
git config user.name
查看用户邮箱
git config user.email

入门篇

Git基础介绍

Repository

Repository 是Git的数据库,通常也被称为仓库

它有两种:远端数据库本地数据库

  1. 远端数据库:配有专用的服务器,为了多人共享而建立的数据库。常见的有Gitee和GitHub。当然除此之外,一般互联网公司,内部有专门搭建自己的Git数据库,只供内网专用,公网无法访问。
  2. 本地数据库:为了方便用户个人使用,在自己的机器上配置的数据库。

本地数据库的创建

当你安装了Git,之后就可以通过命令行创建自己的本地git版本库了。

  1. 新建一个文件夹作为本地库的创建路径
  2. 在该文件执行命令
git init
  1. 以上就已经创建完成
    会提示你Initialized empty Git repository in 什么什么路径
    说明git就把仓库建好了,而且告诉你是一个空的仓库。

Git基础操作

git克隆

从上面,我们了解到,将git的项目复制克隆到我们本机电脑的命令为

git clone git项目地址

git添加和提交

在对文件进行修改后需要对git进行添加和提交代码
通过命令行

git add 文件名

进行提交单个修改的文件

git add *

进行提交所有修改的文件

添加完成后,你就可以进行提交代码,注意,提交代码应该是需要填写你具体作出了什么修改。
该文本提示不仅仅可以让自己知道有哪些改动,也便于多人开发进行查找记录

git commit -m "代码提交信息"

到这一步,你只是把代码提交到了本地数据库,这个时候,并没有到远端git上。

git推送

在入门篇,其实应该需要讲到分支,但是作为新手,如果一来就直接讲分支,就比较复杂,所有在这边就只简单提一句:

在创建仓库的时候,默认会创建一个master主分支,你只需要把代码提交到主分支即可,主分支名称一般都是master

切换到对应分支之后,使用提交命令

git push origin 分支名称

注意:推送的前提,是你有进行修改文件的添加和提交

git更新

假如你是多人合作进行开发项目,当你克隆了项目,但是克隆之后别人又修改了代码,并且提交到了远端git,
为了保证你的代码是最新你需要进行更新自己的代码

更新git命令

git pull

到这里的时候,就有人可能会问,明明已经有克隆命令,直接重新克隆一份就好了。

陈然,克隆命令也是可以获取最新的代码的,但是不要忘记,万一你也有修改代码呢?你的这些代码需要提交到远端呢?
总不能克隆一下项目,就重新写一遍?而且,就算是,你说也可以把文件替换一下,把新的文件复制一下再提交到远端
也是可以的,但是这样的做法非常的麻烦

git log

假如,你想了解git的提交历史记录等信息,可以使用命令:

git log

进阶篇

工作树和索引

在Git管理下,大家实际操作的目录被称为工作树
如以下结构

--A文件夹
		--B文件
		--C文件
--D文件夹
		--E文件
		--F文件

假如你实际对A文件夹下的B文件进行了修改,那么B文件就是对应的工作树

数据库和工作树之间有索引,索引是为了向数据库提交作准备的区域。

Git在执行提交的时候,不是直接将工作树的状态保存到数据库,而是将设置在中间索引区域的状态保存到数据库。
因此,要提交文件,首先需要把文件加入到索引区域中。

所以,凭借中间的索引,可以避免工作树中不必要的文件提交,还可以将文件修改内容的一部分加入索引区域并提交。

也就是

工作树(修改的文件) ----->提交到暂存区 --------> 把暂存区的内容提交到远端git

分支

什么是分支?
作为进阶篇,相当多的篇幅都需要了解分支

分支是用来将特性开发绝缘开来的。在你创建仓库的时候,master 是“默认的”分支。
在其他分支上进行开发,完成后再将它们合并到主分支上。

当我们在开发的时候,如果是简单的项目,直接在master主分支上进行提交,把代码推送到远端git是没有任何问题。

但是,你需要考虑,当正式环境已经有一个版本了,假如现在有两个人同时对该项目进行修改和开发功能,
其中一个人的修改和开发完成了,需要发布到正式版本,另一个人还没修改开发完成或者修改完成了,但是功能和现有的冲突,
一旦更新服务,会导致出现各种问题。

所有我们需要有分支进行提交我们的代码

一般做法是这样:


  1. master分支作为主分支,作为正式环境的代码
  2. 新建dev分支作为开发环境分支
  3. 当需要开发新的功能的时候,以功能命名新建分支
  4. 切换到功能命名的分支,在该分支上提交代码
  5. 开发完成后进行测试,确认没有问题将分支合并到dev开发环境分支
  6. 在开发环境测试功能是否有问题,没有问题,将dev分支合并到master分支

分支分类

分支大致分为两种,一种是Merge,一种是Topic
但是,就我的工作周围,一般还是Mege分支用的居多。
以下,可作为概念了解即可。
Merge分支

Merge分支是为了可以随时发布release而创建的分支,它还能作为Topic分支的源分支使用。保持分支稳定的状态是很重要的。
如果要进行更改,通常先创建Topic分支,而针对该分支,可以使用Jenkins之类的CI工具进行自动化编译以及测试。
.
通常,大家会将master分支当作Merge分支使用。

Topic分支

Topic分支是为了开发新功能或修复Bug等任务而建立的分支。若要同时进行多个的任务,请创建多个的Topic分支。
Topic分支是从稳定的Merge分支创建的。完成作业后,要把Topic分支合并回Merge分支。

接下来,我在这边编写关于分支相关的git命令

分支命令

创建分支命令

git branch 分支名称

切换分支命令

git checkout 分支名称

ps:可使用如下命令同时执行创建并切换分支

git checkout -b 分支名称

以上命令,只是在本地git创建分支,远端并没有
在本地git上可通过如下命令进行查看分支

git branch

通过如下命令,将本地的分支推送到远端git仓库

git push origin 分支名称

将另一个分支代码合并到当前分支上

切换分支
git checkout 当前分支名称
合并
git merge 另一个分支名称
// 推送到分支
git push -u origin 当前分支名称

值得一提的是:关于合并的代码有两种

merge
保持修改内容的历史记录,但是历史记录会很复杂。

rebase
历史记录简单,是在原有提交的基础上将差异内容反映进去。
因此,可能导致原本的提交内容无法正常运行。

也就是说,我们可以使用

git merge 分支名称

或者

git rebase 分支名称

进行合并

但是,很经常的,公司一般为了不出错,会要求需要使用Merge


当将另一个分支代码合并之后,就可以去执行删除分支的命令了

删除远端分支命令

git push origin --delete 分支名称
或者
git push origin -d 分支名称

删除本地分支命令

git branch --delete  分支名称
或者
git branch -d 分支名称

冲突的产生和解决

冲突的产生

先说一下,为什么会产生冲突:

当你的代码还没提交,某一个文件需要修改,但是多人合作开发,另一个人也对该文件进行修改并且提交到了远端git,就会造成冲突,

A人员  拉取B文件   ----->修改,提交了代码,这个时候,修改后的文件就不是和B文件相同了
C人员  拉取B文件   ----->修改了该文件,打算进行提交或者拉取,导致冲突,修改后的文件不和B文件,也不和A人员修改后的文件相同

原因:两个人修改的文件数据不完全一样导致

什么时候有冲突

一般情况下,当我们执行拉取合并推送的时候都有可能会产生冲突
也就是:
拉取

git pull

合并

git merge 分支名称

推送

git push origin 分支名称

如何解决冲突

有了冲突,就需要去解决,你才能够继续提交代码

当你进行拉取,提交和合并操作的时候,提示有冲突一般会提示你是哪些文件有冲突

并且在文件上标记有

<<<<<<< HEAD
冲突代码
>>>>>>>

的地方进行修改

修改完成之后,添加你修改后,解决完冲突的文件,使用命令

git add 冲突的文件名

git commit -m "代码提交信息"

git pull 

当拉取完最新的代码之后,再次使用命令

git add myfile.txt

git commit -m "解决冲突代码提交信息"

git push origin 分支名称

假如,你是进行合并分支的时候产生的冲突,
也就是使用合并命令:

git merge 分支名称

导致冲突,那么,在修改冲突文件前最好是使用命令

git diff 源分支名称 目标分支名称

进行查看预览差异

结语

以上,为关于git的教学,如有新内容将在本文章更新。

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

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

相关文章

量子投资狂飙?四家量子计算公司两天获得巨额投资

&#xff08;图片来源&#xff1a;网络&#xff09;1月23至24日&#xff0c;加拿大光量子计算公司Xanadu、法国量子计算初创公司Welinq、法国量子计算公司PASQAL、瑞典查尔姆斯大学先后宣布获得新一轮巨额融资。短短两天之内&#xff0c;这四起融资事件无疑将量子计算领域的投资…

【数据库原理与SQL Server应用】Part03——T-SQL语言

【数据库原理与应用】Part03——T-SQL语言一、SQL语言基本概念1.1 T-SQL语言简介T-SQL语言的特点&#xff1a;核心SQL语言的4个部分&#xff1a;1.2 T-SQL语言的语法约定1.3 标识符常规标识符分隔标识符1.4 常量和变量数据类型常量变量1.5 注释1.6 运算符1.7 函数1.7.1 标量函数…

省市高速服务区智能一体机视频解决方案的设计

一、行业背景 1&#xff09;传统服务模式难以满足出行需求 出行人员对高速公路服务质量的要求越来越高&#xff0c;传统服务模式难以满足人们对美好出行的需求&#xff0c;节假日拥堵、服务低效等问题影响着服务区的管理。 2&#xff09;服务区智能化程度有待提高 很多高速…

激活函数有哪些?分别有哪些优缺点?【Sigmoid、tanh、ReLU、Leaky ReLU、ParametricReLU】

一、激活函数的提出 1. Motivation 通用逼近定理(Universal Approximation Theorem):一个包含单一隐含层的多层神经元网络能够以任何期望的精度近似任何连续函数。 构建神经网络的核心目的是拟合函数,通过前向传播得到拟合函数或者判别函数输出最终的结果,最初的神经网络…

Ubuntu Pro专业版笔记

Ubuntu是一个开源的操作系统&#xff0c;源自于Debian&#xff0c;以桌面和服务器端应用为主。它拥有丰富的软件仓库和社区&#xff0c;提供强大的稳定性和易用性。而Ubuntu Pro是Ubuntu的商业版本&#xff0c;提供额外的技术支持和服务。它专为企业环境设计&#xff0c;提供了…

【redis】1-8 Redis命令行客户端基本使用

本节目录1. 内容简介2. 操作3. Another Redis Desktop Manager查看redis中的数据4. 课程目录1. 内容简介 如何进入docker容器&#xff0c;登录redis命令行工具reids-cli的使用使用Another Redis Desktop Manager查看redis中的数据 2. 操作 上一章&#xff0c;redis使用docke…

目前我国外贸企业生存现状如何?

今天&#xff0c;最新的进出口贸易数据发布。海关总署9日公布的数据显示&#xff0c;今年前4个月&#xff0c;我国进出口总值12.58万亿元&#xff0c;同比增长7.9%。虽然整体增速有所回落&#xff0c;但完全在可控范围内。但是增速下的外贸企业就不那么好做了&#xff0c;很多外…

MAC IP地址扫描监控

OpUtils包括 IP 地址监控工具、流氓检测工具和 MAC 地址解析器&#xff0c;用于日常监控和管理 DNS 名称、IP 和 MAC 地址。地址监控工具用于 IP 监控&#xff0c;用于管理 DNS 名称、网络的 IP 和 MAC 地址&#xff0c;并跟踪 IP 地址。 IP地址监控功能 OpUtils提供了以下实…

flutter pc端 使用grpc双向流

官网 grpc-dart&#xff1a;https://github.com/grpc/grpc-dart proto文件 syntax "proto3";option go_package "./";package helloworld;service RouteGuide {rpc GetFeature(Point) returns (Feature) {}rpc ListFeatures(Rectangle) returns (stre…

C#读写T5557芯片卡复制ID门禁卡源码

T5557卡是美国Atmel公司生产的多功能非接触式射频芯片卡&#xff0c;属于125KHz的低频卡&#xff0c;在国内有广大的应用市场&#xff0c;如很多酒店的门禁卡都是使用T5557卡。该芯片共有330bit(比特)的EPROM(分布为10个区块, 每个区块33bit)。0页的块0是被保留用于设置T5557操…

maven导入本地jar包

有些jar包是自己封装的或者来源公司私服等. 引入本地jar包方式 另外一种方式 包所在路径 cmd 这样jar包就在你仓库本地仓库里 然后导入

JVM-性能监控与调优-JVM运行时参数

JVM参数选项 官网地址&#xff1a;https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html 类型一&#xff1a;标准参数选项 > java -help 用法: java [-options] class [args...](执行类)或 java [-options] -jar jarfile [args...](执行 jar 文件) 其…

这都能第六?

文章目录&#x1f31f; 专栏介绍&#x1f31f; Vue默认版本&#x1f31f; 拥抱Vue3的UI&#x1f31f; Vue3显著优势&#x1f31f; 专栏介绍 凉哥作为 Vue 的忠诚粉丝输出过大量的 Vue 文章&#xff0c;应粉丝要求开始更新 Vue3 的相关技术文章&#xff0c;Vue 框架目前的地位大…

compooser remove移除包受版本约束导致失败

由于某个项目想移除某个扩展包&#xff0c;但一直报版本不兼容错导致移除不了。报错如下图。后面只要在移除包compooser语句后面加 --ignore-platform-reqs即可&#xff0c;命令&#xff1a;composer remove xxxxxx --ignore-platform-reqs。 移除扩展包后&#xff0c;执行php …

CnOpenData全国兴趣点(POI)数据

一、数据简介 POI&#xff08;Point of Interest&#xff09;&#xff0c;即兴趣点&#xff0c;一个POI可以是餐厅、超市、景点、酒店、车站、停车场等。兴趣点通常包含四方面信息&#xff0c;分别为名称、类别、坐标、分类。其中&#xff0c;分类一般有一级分类和二级分类&…

SpringBoot3x的服务间调用@HttpExchange

首先&#xff0c;我们之前曾经用过很多服务间调用的方式和方法&#xff0c;今天给大家介绍一款SpringBoot3x版本服务间调用&#xff0c;采用HttpExchange注解实现&#xff0c;方便快捷&#xff0c;简单易懂。 创建个SpringBoot3x项目 设置端口号为8081 import org.springframe…

开发日记-sublime3安装插件问题

由于notpad作者本人的一些个人错误观念&#xff0c;我对此软件产生极大恶意&#xff0c;所以又拾起了多年不用的sublime。sublime3其实是个非常好用的编辑器&#xff0c;有强大的插件扩展功能&#xff0c;但由于国内网络限制之前放弃了&#xff0c;这次研究明白了如何使用。 Pa…

谷歌公司再出大招,Chrome 新版本发布

导读您在用什么浏览器呢&#xff1f;Chrome 55 Beta 发布了&#xff0c;是不是很期待让我们一起来看看都有哪些方面的技术改进和变化呢&#xff1f;主要内容如下&#xff1a; 1、输入处理改进 随 着移动网络使用的普及&#xff0c;网站对触摸输入做出良好反应的重要性也日益增…

【内网安全】——meterpreter使用攻略

作者名&#xff1a;白昼安全主页面链接&#xff1a; 主页传送门创作初心&#xff1a; 一切为了她座右铭&#xff1a; 不要让时代的悲哀成为你的悲哀专研方向&#xff1a; web安全&#xff0c;后渗透技术每日emo&#xff1a; 再给我一年&#xff0c;好吗&#xff1f;Metasploit中…

点云的降采样

1. 点云深度学习中的新下采样方法 (CSDN) 现在比较常见的下采样算法有&#xff1a;farthest point sampling(PointNet&#xff0c;ShellNet)、random sampling(RandLA-Net)、grid sampling(KPConv&#xff0c;Grid-GCN)等。它们各有特点&#xff1a; farthest point sampling…