【Gitee版】一篇教你如何快速入门git(详解)

前言--区分Git与Gitee

Git 是一个强大的分布式版本控制系统,用于管理源代码。市面上有很多基于git的仓库网站,例如:GitHub、Gitee、GitCode等,它们之间的关系就好像是:git为基类,剩余为子类的样子。使用的网站是哪一个都无所谓,git命令是公用的,我们主要还是学习git,而不是专注于图形化的某一个具体网站。

我们为什么要使用Git,Git有什么用?

版本控制:Git 帮助跟踪文件的更改,记录历史版本,以便随时回溯。

分布式:每个开发人员都有自己的本地仓库,所有版本信息都保存在本地。

快照:每次提交都是项目当前状态的快照,而非文件差异的记录。

重要的概念:

仓库(Repository):存放项目文件和版本历史的目录。

暂存区(Staging Area):保存将要提交的变更的区域,允许你选择性地提交更改。

HEAD:指向当前分支的最新提交,常用于查看或引用当前状态。

标签(Tag):为特定的提交创建一个快照标记,通常用于版本发布。

认识Git的三个区域

Git 的操作通常涉及三个主要区域,它们分别是:工作区(Working Directory)、暂存区(Staging Area / Index)和本地仓库(Local Repository)。

1. 工作区(Working Directory)

  • 定义:工作区是你在本地计算机上实际操作的文件夹,包含了你的项目文件。
  • 作用:在工作区中,你可以自由地修改文件。所有的编辑、创建和删除操作都在这个区域进行。
  • 状态:文件的状态通常为以下几种:
    • 未跟踪(Untracked): 新添加的文件,尚未被 Git 跟踪。
    • 已修改(Modified): 文件已被修改,但是还没有被暂存。
    • 已跟踪(Tracked): Git 正在跟踪的文件,可以是未修改、已修改或已删除状态。

2. 暂存区(Staging Area / Index)

  • 定义:暂存区是一个中间区域,用于暂时保存即将提交到本地仓库的文件更改。
  • 作用:暂存区允许你选择性地准备将哪些更改包含在下一次提交中。这意味着,你可以通过添加和移除文件来控制提交的内容。
  • 操作
    • 使用 git add [file] 可以将文件从工作区添加到暂存区。
    • 使用 git reset [file] 可以将文件从暂存区移回到工作区(撤销暂存)。

3. 本地仓库(Local Repository)

  • 定义:本地仓库是 Git 在你的计算机上保存所有历史版本的地方,通常包含 .git 目录。
  • 作用:在本地仓库中,Git 存储所有的提交信息、版本历史和其他元数据。这是 Git 版本控制的核心。
  • 操作
    • 提交更改:使用 git commit -m "message" 命令将暂存区的更改保存为一个新的提交。在这一操作之后,它们在本地仓库中创建一个新的版本。
    • 查看提交历史:使用 git log 查看本地仓库中的提交记录。

三个区域的工作流程

以下是 Git 中工作区、暂存区和本地仓库的典型工作流程:

  1. 在工作区中进行更改:编辑文件,添加文件或删除文件。
  2. 将更改添加到暂存区:通过 git add [file] 命令将想要提交的更改添加到暂存区。
  3. 提交更改:使用 git commit -m "message" 将暂存区的更改提交到本地仓库,同时创建一个新的提交记录。
  4. 重复以上步骤:继续在工作区中修改文件,添加到暂存区并提交,直到你完成所有的更改。

总结

  • 工作区:你正在编辑的文件区域。
  • 暂存区:准备提交的更改的临时存储区域。
  • 本地仓库:保存版本历史的地方。

本地仓库操作

初始化

整个路径尽量不要有中文

a.创建空目录:mkdir shop

此时文件夹就是普通的文件夹

b.进入到空目录中:cd shop

c.初始化仓库:git init

让Git知道,它需要来管理这个仓库

这时候,新建的目录就关联上仓库了。再看文件就变成了这个样子:只不过这是本地仓库,不是远程的。

d.新建文件:touch test.txt

常用指令操作

查看当前状态:git status

git status

添加到缓存区:git add 文件名

git add 文件名
git add 文件名1 文件名2 文件名3 ...
git add . #添加当前目录到缓存区

 

(这里刚刚忘截图了,add后的状态就是一个蓝色的加号)

提交到版本库:git commit -m "注释内容"

git commit -m "注释内容"

(提交到版本库后,状态就变成了一个绿底色的对勾)

注意Tips1:

如果没有提交,文件夹就会给出警告标识。当我再次将提交,更改版本,那么文件夹将会改变状态,绿色的状态。

版本回退:git reset 

版本回退分为两个步骤操作:

①查看版本,确定要回到的时刻点

git log
git log --pretty=online

 从下往上看。最下面是最根节点版本信息。内容包括:

版本号(commit *****..**)

提交人(Author)

日期(Date)

日志内容(-m “此处的内容”)

在这里我们可以看到一个版本占一行,此时日志信息只包括:版本号+日志内容

②回退操作,(回到历史某一时刻)

git reset --hard 版本号

③重返新版,(回退操作可逆嘛?是的,可逆)

第一步:查看历史操作号,这里不止新版本有编号,回退操作本身也有编号。而git log只显示当前版本之前的版本号,还不包括操作编号

git reflog

 

然后第二步再使用git reset --hard 版本号指令回到某一个历史节点。

上述所说的,不管是版本号还是操作编号都是"commit id"。

远程仓库操作

我的gitee仓库:李冰鑫/shop (gitee.com)

基于Https协议:

Https地址:shop: 根据itheima教学视频学习而创建的一个仓库

a.创建目录并进入(建议目录名与仓库名一致):

b.使用clone指令将仓库克隆到本地:

git clone https://gitee.com/lbingxin/shop.git #线上仓库地址

此时在目录内有一个克隆下来的仓库。

c.在仓库上做对应的操作,这个克隆仓库就是我们的工作区。我们的操作主要包括:提交暂存区(git add),提交本地仓库(git commit),提交线上仓库(git push),拉取线上仓库(git pull)。

(1)创建了一个readme.txt文档,并编辑内容:

 (2)提交到暂存区:

git add 文件名

提交后显示的内容意思是:

此时已经将新的操作过的仓库存到了暂存区,还没有提交。

相比上个版本的仓库,更改内容为:new file多了一个文件:readme.txt

(3)提交到本地仓库

git commit -m "日志注释内容"

(4)提交到线上仓库

git push [...]

 

push之后,远端仓库就更新为你的本地版本库的状态,暂存区的没有被commit的内容被忽略。

(5)拉取线上仓库

git pull [...]

使用方法与push类似,一个是从本地推向线上,一个是从线上拉向本地。

pull的目的是将你在远端的操作更新到本地。例如:在远端删除了一个文件,本地由于比git远端仓库的效率低,有状态延迟。需要我们pull一下,拉取线上仓库的状态。

 注意:

每天打开电脑,首先git pull拉取线上仓库的最新版本。每天关闭电脑前,首先要git push将本地代码提交到线上仓库

 基于SSH协议:

该方式与前面的方式相比,知识影响gitee对于用户的身份鉴权方式,对于git的具体操作(具体的指令)没有任何影响。

步骤:

①生成公私钥指令:

ssh -keygen -t rsa -C"注册邮箱" #邮箱填自己注册gitee时的邮箱

 生成的公钥在 ~/.ssh文件中的id_rsa.pub中,id_rsa是私钥,不能给别人看。生成之前先看看自己有没有,没有的话再执行指令。

②将公钥上传到gitee:

首先,使用编辑器,查看id_rsa.pub文件打开,例如:vi id_rsa.pub

然后,将这段内容进行复制,然后进入gitee网站:点击右上角的头像,进入设置界面:选择SSH公钥选项

最后,将公钥复制到指定位置。自己随便起个标题(就相当于备注吧,让你认识是自己的公钥,添加的公钥可以删除)

③克隆仓库:

git clone git@gitee.com:lbingxin/shop.git #SSH协议的gitee仓库地址

 

Git的分支管理

分支的简介

为什么我们的版本都可以回退和逆回退呢?这是因为我们每次提交都会有一个记录,Git把他们串成时间线,形成类似于时间轴的东西,这个时间轴就是一个分支,我们称之为master分支。

在开发的时候往往是团队协作,多人进行开发,因此光有一个分支是无法满足多人同时开发的需求的,并且在分支上工作并不影响其它分支的正常使用,会更加安全,Git鼓励开发者使用分支去完成一些开发任务。

Git的分支指令

git branch #查看分支
git branch 分支名 #创建分支
git checkout 分支名 #切换分支git checkout -b 分支名 #创建分支同时切换到该分支git branch -d 分支名 #delete删除分支
git merge 被合并的分支名 #合并分支

查看分支git branch

git branch

当前分支的前面有*,且颜色被标记为特殊颜色(例如:绿色)

创建分支git branch 分支名

git branch 分支名

切换分支git checkout 分支名

git checkout 分支名

注解:创建分支并切换git checkout -b 分支名

git checkout -b 分支名

删除分支git branch -d 分支名

git branch -d 分支名

一定要先退出要删除的分支,不然就会产生错误信息:

我们看到我们身处bugFix分支中,然后试图删除bugFix分支,这时会报错:error:......

合并分支git merge 被合并分支名

git merge 被合并分支名

冲突的产生与解决

①模拟冲突产生:

在线上(浏览器中)将仓库内的任意一个内容进行编辑修改:例如将readme.txt的文本信息进行修改:

 此时查看本地仓库内的文件:

此时:本地仓库内容与远程仓库内容的不一致即为冲突。我们如果想进行git push,就会出现问题。

hint(提示):在push之前进行pull,拉取线上仓库的内容。

②解决问题:

解决冲突的方式:合并内容,然后与同事商量保留哪些内容。

解决冲突:在合并分支时可能会出现冲突,需要手动解决并再次提交。

撤销更改

  • 撤销暂存区更改:git reset [file]
  • 撤销未提交的更改:git checkout -- [file]

图形化管理工具

TortoiseGit:小乌龟

我们可以从中找到很多我们用到过的指令,此时我们就可以根据图形化指示进行操作。

忽略文件操作

应用场景:

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

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

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

常见规则:

/mtk/

过滤整个文件夹

*.zip

过滤所有压缩文件

/mtk/do.c

过滤某个具体文件

lindex.php

不过滤某个具体文件

一般的.gitignore文件内容:

# Build and Release Folders
bin-debug/
bin-release/
[Oo]bj/
[Bb]in/# Other files and folders
.settings/# Executables
*.swf
*.air
*.ipa
*.apk#过滤掉不想要文件和文件夹
*.exe
*.sln
*.vcxproj
*.filters
*.user
*.suo
*.db
*.ipch
Debug/
.vs
Release/# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
# should NOT be excluded as they contain compiler settings and other important
# information for Eclipse / Flash Builder.

总结:

初始化与克隆

  • git init:初始化一个新的 Git 仓库。
  • git clone [url]:从指定 URL 克隆一个远程仓库。

查看状态

  • git status:查看工作区和暂存区的状态,显示哪些文件已修改、哪些已暂存等。

暂存与提交

  • git add [file]:将文件添加到暂存区。
  • git commit -m "commit message":将暂存区的更改提交到本地仓库,并附上提交信息。

查看历史

  • git log:查看提交历史,显示每次提交的信息(SHA 值、作者、日期等)。
  • git diff:查看尚未暂存的文件与最近一次提交之间的差异。

分支管理

  • git branch:列出所有分支,当前分支会有星号标记。
  • git branch [branch-name]:创建一个新分支。
  • git checkout [branch-name]:切换到指定的分支。
  • git merge [branch-name]:将指定分支合并到当前分支。

远程操作

  • git remote -v:查看当前配置的远程仓库。
  • git push [remote] [branch]:将本地分支的更改推送到指定的远程仓库。
  • git pull [remote] [branch]:从远程仓库拉取并合并最新的更改。

常见工作流程

  1. 克隆仓库git clone [url]
  2. 创建新分支git checkout -b [new-branch]
  3. 修改文件,添加更改git add [file]
  4. 提交更改git commit -m "description"
  5. 切换回主分支git checkout main
  6. 合并分支git merge [new-branch]
  7. 推送更改到远程git push origin main

感谢大家!

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

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

相关文章

Linux系统编程学习 NO.11——进程的概念(2)

谈谈进程的性质 进程的竞争性 由于CPU资源是稀缺的,进程数量是众多的。不可避免需要造成进程排队等待CPU资源的动作,内核的设计者为了让操作系统合理的去调度这这些进程,就产生了进程优先级的概念。设置合理的进程优先级能让不同进程公平的去竞争CPU资…

灵神 刷题DAY1

Python与java的刷题的区别 1. Python没有分号 2. Python不能return的时候赋值 3. Python没有小括号和花括号 4. Python的循环很奇怪&#xff0c;没有for(int i0;i<32;i)这种形式 而是直接用的是for i in range(n)这种 5. Python中没有 6. Python中没有&& 是an…

Nginx中使用keepalive实现保持上游长连接实现提高吞吐量示例与测试

场景 HTTP1 .1之后协议支持持久连接&#xff0c;也就是长连接&#xff0c;优点在于在一个TCP连接上可以传送多个HTTP请求和响应&#xff0c; 减少了建立和关闭连接的消耗和延迟。 如果我们使用了nginx去作为反向代理或者负载均衡&#xff0c;从客户端过来的长连接请求就会被…

【Spring AOP 原理】

首先AOP跟OOP(面向对象编程)、IOC(控制反转)一样都是一种编程思想 跟OOP不同, AOP是面向切面编程, 面对多个不具备继承关系的对象同时需要引入一段公共逻辑的时候, OOP就显得有点笨重了, 而AOP就游刃有余, 一个切面可以横跨多个类或者对象去执行公共逻辑, 极大的提升了开发效率…

Vue3集成搜索引擎智能提示API

需求&#xff1a; 如何在项目中实现像百度搜索框一样的智能提示效果&#xff0c;如下图所示&#xff1a; 相关知识&#xff1a; 下面是各厂商提供的免费API 厂商请求百度http://suggestion.baidu.com/su?wd中国&cbwindow.baidu.sug必应http://api.bing.com/qsonhs.as…

python3的基本数据类型:可变集合的用法

一. 简介 前面学习了 python3中的一种基本数据类型-集合&#xff0c;文章如下&#xff1a; python3的基本数据类型&#xff1a;集合的创建与分类-CSDN博客 本文继续学习 Python3中的集合&#xff0c;主要学习 可变集合的用法。 二. python3的基本类型&#xff1a;可变集合的…

从零开始:我的鸿蒙学习之旅(二)

前言 记录我在学习鸿蒙操作系统过程中的成长&#xff0c;旨在激励我自己&#xff0c;也希望能激发读者们的学习热情&#xff0c;一起愉快地探索鸿蒙开发的世界&#xff01; 我说说这几天的学习成果吧&#xff0c;将开发入门的第一部分的剩下小节以及第二部分的第一小结写完了…

SSM学习记录(一)之SSM整合

SSM学习记录&#xff08;一&#xff09;之SSM整合 一、SSM整合二、SSM整合的核心问题1、SSM需要几个IoC容器2、每个IoC容器对应哪些类型组件3、IoC容器之间的关系和调用方向4、具体有多少配置以及对应的容器的关系5、IoC初始化方式和配置位置 一、SSM整合 微观&#xff1a;将学…

【从理论到应用】HTTP请求响应详解 (请求数据格式,请求方式,Web开发中的体现)

目录 一.HTTP协议 二.HTTP请求数据格式 请求方式 三.Web开发中的HTTP请求与响应 接收HTTP请求 同一响应格式 四.使用第三方工具发送HTTP请求&#xff08;Apifox、postman、Yapi&#xff09; 一.HTTP协议 HTTP&#xff08;Hypertext Transfer Protocol&#xff0c;超…

猎板PCB罗杰斯板材的应用案例

以下是几个猎板 PCB 与罗杰斯板材结合的具体案例&#xff1a; 案例一&#xff1a;5G 通信基站天线 PCB 在 5G 通信基站的天线系统中&#xff0c;对高频信号的传输和处理要求极高。猎板 PCB 采用罗杰斯板材&#xff0c;凭借其稳定的低介电常数&#xff08;如 RO4003C 板材&…

基于Java Springboot快递物流管理系统

一、作品包含 源码数据库全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Layui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA 数据库&#xff1a;MySQL8.0 数据库管…

力扣662:二叉树的最大宽度

给你一棵二叉树的根节点 root &#xff0c;返回树的 最大宽度 。 树的 最大宽度 是所有层中最大的 宽度 。 每一层的 宽度 被定义为该层最左和最右的非空节点&#xff08;即&#xff0c;两个端点&#xff09;之间的长度。将这个二叉树视作与满二叉树结构相同&#xff0c;两端…

Servlet的使用

一.Servelt简介 1.为什么需要servlet:因为前端三件套无法操控数据库,即与用户进行交互操作 2.servlet由服务器端调用和执行的(由tomcat解析和调用的),由java语言编写,本质就是java类 3.功能强大,可以完成几乎所有的网站功能,按照Servlet规范开发 二.手动开发Servelt 1.Servl…

【嵌入式C语言】GCC概述+C语言编译过程

目录 前言1 课程介绍1.1 计算机程序语言的学习思路?1.2 基本程序设计思想:1.3 C语言工具的特性:1.4 推荐教材 2 GCC的使用及其常用选项介绍2.1 GCC概述gcc -vgcc -ogcc -v -o 2.2 C语言编译过程2.2.1 预处理2.2.2 编译2.2.3 汇编2.2.4 链接2.2.5 问题 2.3 宏的使用 前言 重新学…

C语言 数组排序 – 插入法排序 - C语言零基础入门教程

目录 一.简介二.数组插入法排序原理三.数组插入法排序实战四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.简介 经过前面的学习&#xff0c;我们已经学会了数组遍历&#xff0c;在开发中&#xff0c;我们经常回碰到对数组进行排序&#xff0c…

vulnhub- Machine_Matrix_v3靶机的测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 四、结论 一、测试环境 1、系统环境 渗透机&#xff1a;kali2021.1(192.168.200.131) 靶 机&#xff1a;Linux matrix 4.16.3-porteus(192.168.200.1…

2024-11-13 Unity Addressables1——概述与导入

文章目录 1 概述1.1 介绍1.2 主要作用1.3 Addressables 与 AssetBundle 的区别 2 导入3 配置3.1 方法一3.2 方法二 1 概述 1.1 介绍 ​ Addressables 是可寻址资源管理系统。 ​ Unity 从 2018.2 版本开始&#xff0c;建议用于替代 AssetBundle 的高阶资源管理系统。在 Unit…

操作系统lab4-页面置换算法的模拟

操作系统lab4-页面置换算法的模拟 文章目录 操作系统lab4-页面置换算法的模拟实验目的实验内容实验分析 代码测试用例运行结果 实验目的 1、掌握请求分页存储管理的常用理论&#xff1a;页面置换算法。 2、理解请求分页中的按需调页机制。 实验内容 独立地用高级语言编写和…

springboot的依赖实现原理:spring-boot-starter-parent解析

01 dependencyManagement的作用 在使用springboot时我们会在项目pom引入以下配置和依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version> &l…

基于Java Springboot图书馆管理系统

一、作品包含 源码数据库文档全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&#xff1a;MySQL8.0 数据…