Git原理详解+指令操作,带你快速掌握Git

news2025/2/1 17:49:10

一、相关概念

版本控制

什么是版本控制?

  • 用于管理多人协同开发项目的技术
  • 对文件的版本控制,要对文件进行修改、提交等操作

版本控制的分类

1.本地版本控制

就是放在本地

2.集中版本控制 SVN

所有的版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改

img

3.分布式版本控制 Git

  • 每个人都拥有全部的代码。(这也有安全隐患,程序员跑路泄密)
  • 每个用户都有所有的版本数据,可以在本地查看所有版本历史,可以离线在本地提交,只需在连网时push到相应的服务器或其他用户那里。
  • 每个用户都有所有版本数据,有一个用户的设备没有问题就可以恢复所有的数据。
  • 不会因为服务器损坏或者网络问题,造成不能工作的情况!可以先在本地写代码不提交。

img

GIT和SVN的区别

SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络带宽要求较高。

Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网了,因为版本都在自己电脑上。协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以直接看到更新了哪些代码和文件!

通常这俩是公司使用最多的,而Git则是最流行的,无脑学Git就行,后期用到其他的再学也容易。

二、Git的下载与配置

下载、安装、卸载

1.下载链接

Git官网下载:速度可能较慢

Git镜像:GITCNPM Binaries Mirror

2.安装方法

无脑下一步即可!选择路径,其他默认即可。
3.如何卸载

  1. 删除环境变量,和Git相关的
  2. 卸载Git

启动方式

开始菜单会有三个选项:分别代表不同的启动方式,Windows和Linux命令行语句有些差别。

img

Git配置相关命令

下面只写一些Git相关的,其他一些基础的可以参考这篇文章 *http://t.csdn.cn/WUFu5*

#清屏
clear
#查看历史记录
history

#查看系统(system)配置
git config --system --list

#查看当前用户(global)配置
git config --global  --list

#global配置名称
git config --global user.name "GDM"

#global配置邮箱
git config --global user.email 24736743@qq.com

配置文件

注:所有的配置文件其实都保存在本地,我们可以直接找到文件进行更改

Git配置文件位置:

  • Git\etc\gitconfig:Git安装目录下的gitconfig --system系统级
  • C:\Users\19396\.gitconfig:全局/用户(global)配置

img

忽略文件

.gitignore

我们写项目都会有一个 .gitignore文件,它告诉 git 不要跟踪特定的文件、目录或文件类型。

并不是编程项目中的每个文件都非常重要,需要由GIT进行跟踪。许多文件是在特定机器或操作系统上编译代码的特定结果,不应由版本控制进行跟踪。例如,两个人在两个不同的操作系统上可能会从相同的代码生成两个不同的可执行文件。虽然可执行文件可以在一台机器上运行,但它可能会给另一台机器带来严重的问题。由于这些原因,我们在检入代码时使用 .gitignore 文件来过滤掉不需要的文件。

image-20230610150458517

忽略规则

  1. 忽略文件中,使用#注释

  2. 可以使用Linux通配符,例如:*代表多个字符,?代表一个字符

  3. !表示例外规则,将不被忽略

  4. / 表示仅忽略此目录下的文件

  5. //表示忽略子目录下该名称的子目录,二位文件

    *.txt		#忽略所有以 .txt结尾的文件
    !lib.txt	#但lib.txt除外
    /temp		#仅忽略项目根目录下的TODO文件,不包括其他目录teml
    build/		#忽略build/目录下的所有文件
    doc/*.txt	#忽略doc/notes.txt,但不包括doc/server/arch.txt
    

三、Git核心基本理论

四个区域

img

1.工作目录(Working Directory)

即进行开发改动的地方,是当前看到的,内容也是最新的,平常开发就是拷贝远程仓库中的分支,基于该分支进行开发,在开发的过程就是在工作区的操作。

2.暂存区(Stage/Index)

位于.git目录下的index文件,暂存区会记录 git add 添加文件的相关信息(文件名、大小),不保存文件实体,通过 id 指向每个文件的实体。

.git是隐藏文件夹,要勾选起来 显示隐藏文件夹选项 才能看到。

使用 git status 可以查看暂存区的状态,暂存区标记了当前工作区中那些内容是被 git 管理的,当完成某个需求或者功能后需要提交代码,第一步就是通过 git add 先提交到暂存区。

3.本地仓库(Repository或Git Directory)

位于自己的机器,本地仓库保存了被提交过的各个版本,比起工作区和暂存区的内容,它更旧一些。

首先是 git commit 同步 index 的目录树到本地仓库,然后通过 git push 同步本地仓库到远程仓库。

4.远程的git仓库(Remote Directory)

位于托管代码的服务器,远程仓库的内容能够被分布在多个地点的处于协作关系的本地仓库修改。比起本地仓库,远程仓库通常旧一些,因此本地仓库修改完之后需要同步到远程仓库。

文件的四种状态

四种状态

img

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过 git add 状态变为 Staged.
  • Staged: 暂存状态. 执行 git commit 则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为 Unmodify 状态. 执行 git reset HEAD [filename] 取消暂存, 文件状态为Modified
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为 Modified . 如果使用 git rm 移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add 可进入暂存 staged 状态, 使用 git checkout 则丢弃修改过, 返回到 unmodify 状态, 这个 git checkout 即从库中取出文件, 覆盖当前修改

在idea中也有颜色提示

  • 绿色——已经加入控制暂未提交
  • 红色——未加入版本控制
  • 蓝色——加入,已提交,有改动
  • 白色——加入,已提交,无改动
  • 灰色——版本控制已忽略文件
  • 黄色——被git忽略,不跟踪

查看文件状态指令

上面说文件有四种状态,可以根据下面的命令查看文件状态

#查看指定文件状态
git status [filename]

#查看所有文件状态
git status

#添加所有文件到暂存区
git add .

#提交到本地 -m 提交信息
git commit -m

#提交到远程
git push

四、Git

项目的创建和克隆

一种是创建全新的仓库,另一种是克隆远程仓库。

1.提交已存在的本地仓库

  1. 在你需要的位置鼠标右键 git bash here,输入命令git init

  2. 把你的项目移动到 这个文件夹内

  3. 查看当前状态git status,用于显示工作目录和暂存区的状态,红色的字体显示的就是你修改的文件,绿色是没提交过的文件。

  4. 提交文件到git缓冲区,git add . 或者 git add [filename]

  5. 提交文件到本地仓库git commit –m "备注描述"

  6. 提交文件到远程仓库 git push git push origin master

2.克隆远程仓库

在你需要的位置鼠标右键 git bash here,输入命令 git clone [HTTPS]

image-20230610151913504

Git的分支

git分支就是在版本控制过程中,使用多条线同时推进多个任务

在实际的项目中通常不同的小组负责不同的开发模块,这时候可以创建几个功能分支,当这些功能测试完成后,再合并到主分支。

使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。

分支相关指令

# 列出所有本地分支
git branch
# 列出所有远程分支
git branch -r
# 新建一个分支,但依然停留在当前分支
git branch [branch-name]
# 新建一个分支,并切换到该分支
git checkout -b [branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]$ git branch -dr [remote/branch]

五、Git指令总结

帮助

git help 显示有关git的帮助信息

  • 如果git help 后面没有参数,命令行将会打印出git命令的概要和最常用的git命令。
  • 如果git help 后面有-all或者-a参数,命令行将会打印出所有可用的git命令。
  • 如果git help 后面有-guide或者-g参数,命令行将会打印出有用的git指南。
  • git --help 与 git help 相同,因为前者被内部转换为后者。
  • 举栗子:如果想要查看pull命令如何使用,则可以使用git help pull命令,按键盘中的q键可退出

新建代码

# 在当前目录新建一个Git代码库
git init

# 新建一个目录,将其初始化为Git代码库
git init [project-name]

# 下载一个项目和它的整个代码历史
git clone [url]

配置

#显示当前的Git配置
git config --list

#编辑Git配置文件
git config -e [--global]

#设置提交代码时的用户信息
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

代码库
git init

新建一个目录,将其初始化为Git代码库

git init [project-name]

下载一个项目和它的整个代码历史

git clone [url]



## 配置

```bash
#显示当前的Git配置
git config --list

#编辑Git配置文件
git config -e [--global]

#设置提交代码时的用户信息
git config [--global] user.name "[name]"
git config [--global] user.email "[email address]"

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

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

相关文章

GDAL读取属性表值乱码解决方法

文章目录 方法1:方法2:1.通过在线网网站,查看编码2.参考C中gbk和utf8互相转换文章 gdal示例代码 方法1: 在网上查看的推荐方法(C代码),但没解决我遇到的问题; CPLSetConfigOption(&…

SSM整合快速入门案例

文章目录 前言一、设计数据库表二、创建工程三、SSM技术整合四、功能模块开发五、接口测试总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者…

Java网络开发(Tomcat)——登陆和注册功能 的 迭代升级 从Jsp到JavaScript + axios + vue 诸多bug 同步到异步

目录 引出前置工作vueaxiosresp0.vue版本的jsp模板1.导包--Json:pom.xml文件:2.新建一个专门用来处理响应的实体类ResData3.在axios中,所有响应必须是 resp.getWriter().write() 的方式,核心代码如下4.在jsp前端代码中导包&#x…

华为OD机试真题B卷 JavaScript 实现【查字典】,附详细解题思路

一、题目描述 输入一个单词前缀和一个字典,输出包含该前缀的单词。 二、输入描述 单词前缀字典长度字典。 字典是一个有序单词数组。 输入输出都是小写。 三、输出描述 所有包含该前缀的单词,多个单词换行输出。 若没有则返回-1。 四、解题思路…

SLAM十四讲——ch3实践

ch3的实践及避坑 一、ch3的总体步骤二、文件的执行1. 实践:Eigen2. 实践:Eigen几何模块3. 可视化演示 出现的问题 一、ch3的总体步骤 确保已经安装Eigen库,Eigen库是一个C开源线性代数库。 sudo apt-get install libeigen3-dev说明&#xf…

在 Compose 中实现缓存列表数据提升用户体验(Stale-while-revalidate)

前言 最近在利用业余时间使用 Compose 实现一个 Github APP 客户端。 对标的是 GSY 大佬使用多种不同语言框架实现的 Github APP。 在实现过程中发现一些问题,因为这个客户端的数据几乎全部来自于 Github API,所以 UI 渲染也极度依赖于请求到的数据。…

JAVA面向对象(三)

第三章 封装与继承 目录 第三章 封装与继承 1.1.封装 1.2.包 1.3.访问权限控制 1.4.static修饰符 1.4.1.成员变量 1.4.2.成员方法 1.4.3.代码块 总结 内容仅供学习交流,如有问题请留言或私信!!!!&#xff0…

java并发编程:ArrayBlockingQueue详解

文章目录 一、简介二、数据结构三、源码分析3.1 属性3.2 构造方法3.3 方法3.3.1 入队3.3.2 出队3.3.3 获取元素3.3.4 删除元素 四、总结 一、简介 ArrayBlockingQueue 顾名思义:基于数组的阻塞队列。数组是要指定长度的,所以使用 ArrayBlockingQueue 时…

在知乎逮到一个腾讯10年老测试,聊过之后收益良多...

老话说的好,这人呐,一单在某个领域鲜有敌手了,就会闲得蛋疼。前几天我在上班摸鱼刷知乎的时候认识了一位腾讯测试大佬,在腾讯工作了10年,因为本人天赋比较高,平时工作也兢兢业业,现在企业内有一…

Python基础知识讲解——main方法

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 估计很多人跟我一样初学python看代码的时候先找一下main()方法,从main往下看。 但事实上python中是没有你理解中的“main()”方法的。 言归正传 if name "main":可以看成是python程序的入口&a…

数据结构与算法系列之习题练习

💗 💗 博客:小怡同学 💗 💗 个人简介:编程小萌新 💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞 力扣习题 括号匹配问题。用队列实现栈。用栈实现队列。设计循环队列。 有效的括…

【数据分析案例】深度分析超市零售商店数据--Python数据分析实战

前言 咳咳,又是好久不见~这不高考已经结束了 对python感兴趣的准大学生们,是打算好好玩几个月还是,继续研究学习python呢~ 🤨 我呢 还是建议大家劳逸结合哈哈 先玩再学习~ 当然啦 最重要的还是看你们自己呀 不过我以上这些都不能…

[NOI2007] 调兵遣将

题目描述 我军截获的情报显示,敌军正在集结兵力试图向我军重要的军械研究所发起进攻。由于我军正处于多线作战的状态,无法抽调大批兵力前去支援,指挥部决定通过有效的战前部署来提高胜率,减少伤亡和损失。 该军械研究所的平面图…

网络安全自学笔记+学习路线+就业规划(超详细)

每天都有新闻报道描述着新技术对人们的生活和工作方式带来的巨大乃至压倒性影响。与此同时有关网络攻击和数据泄露的头条新闻也是日益频繁。 攻击者可谓无处不在:企业外部充斥着黑客、有组织的犯罪团体以及民族国家网络间谍,他们的能力和蛮横程度正日渐…

如何使虚拟机自动生成ip地址

一. 打开虚拟机并登录账号进入命令行界面输入指令: vi /etc/sysconfig/network-scripts/ifcfg-ens33 通过指令进入到下面的界面当中 点击键盘输入 "i" 进入编辑模式将文件修改为 文件当中的 BOOTPROTO可以将ip地址定义为自动生成类型或者静态指定类型其中…

力扣 213. 打家劫舍 II

一、题目描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻…

高考后计算机人工智能大类专业的选择建议

随着GPT的出现,很多人开始质疑是否还需要学计算机专业,计算机专业是否会消失。 先给结论,不会! 只是会产生分层,大体上是这样的: 核心代码部分还是需要人来写的,只要是代码方式出现的结果&#…

了解ASEMI代理英飞凌TLE6208-6G其功能和应用的综合指南

编辑-Z TLE6208-6G是一款高度集成、通用且高效的汽车半桥驱动器,由英飞凌设计。这种功能强大的设备专门设计用于满足汽车应用的苛刻要求,如控制直流电机、螺线管和电阻负载。在本文中,我们将深入研究TLE6208-6G的功能、优点和应用&#xff0…

【Spring MVC】这几种传参方式这么强大,让我爱不释手,赶快与我一起去领略吧 ! ! !

前言: 大家好,我是良辰丫,在上2一篇文章中我们已经初步认识了Spring MVC,并且学习了热部署的配置,今天我们将继续开始我们的Spring MVC的学习! ! !💌💌💌 🧑个人主页:良辰针不戳 📖所属专栏:jav…

JDK9~17+Springboot3 @Resource常见问题和解决方案

一、常见问题描述 因为JDK版本升级的改动,在Jdk9~17环境下,搭建Springboot项目,会出现原有Resource(javax.annotation.Resource)不存在的问题,导致项目从Jdk8迁移到高版本时遇到的问题 原因 你可能会问&…