Git使用与管理

news2025/5/19 14:02:13

一.基本操作

1.创建本地仓库

在对应文件目录下进行:

git init

输入完上面的代码,所在文件目录下就会多一个名为 .git 的隐藏文件,该文件是Git用来跟踪和管理仓库的。

我们可以使用 tree 命令(注意要先下载tree插件)来查看 .git 文件的细节:

创建完后我们一定要配置配置Git,设置用户名和邮箱地址:

git config [--global] user.name "***"   
git config [--global] user.email "***"  

global是一个选择选择项,填上这个表示这台机器上所有的Git仓库都会使用这个用户名和邮箱地址。

能设置自然也能删除配置:

 git config [--global] --unset user.name
 git config [--global] --unset user.email

了解完配置与删除,我们可以使用下面的命令来查看配置:

git config -l

2.工作区、暂存区、版本库(重要)

工作区:我们在本地的目录;

暂存区(stage、index):一般存放在 .git 目录下的index文件;

版本库:隐藏目录 .git 。

我们在本地,也就是工作区创建的文件,可以通过add操作将文件上传到暂存区;我们可以使用commit命令将暂存区的文件上传到版本库中。从这里也可以看出,我们新创建的文件没有经过add和commit命令是没有添加到仓库中的。

//指定文件名,可写多个,用空格隔开
git add 文件名
//所有文件
git add .

通过这里的学习也解开了我之前的疑惑,那就是我在提交文件名有空格的文件时一直报错,原来用了空格表示不是一个文件了。如果真有空格,可以使用引号括起来;也可以使用 \ 来转义空格。

git commit -m "信息"
//指定文件到版本库中
git commit 文件名 -m "信息"

这里是信息指的是本次提交的细节。

通过上面两个步骤我们就将代码提交到版本库里了。我们可以使用下面的命令来查看历史提交记录:

git log [--pretty=oneline]

--pretty=oneline 是一个可选项,加上这个会使历史提交记录显示的更加简洁。

通过上面的命令我们会得到下面的内容:

4e65c55222473e05e72338d3ba75a101a6a56d56 First commit

前面这一堆数字和字母是commit id,这个很重要,下面会说到。

在使用上面的 tree .git 命令查看,我们可以看到objects中存入了commit id。

 在最上面的那张图上我们可以看到head指向master,我们查看以下master的内容,发现:

4e65c55222473e05e72338d3ba75a101a6a56d56

其中存着的正是上面的commit id。这个master存的正是最新的commit id。

下面着重说一下objects。

对一开始那张图进行补充:

objects 为Git的对象库,里面包含了创建的各种版本库对象及内容。

我们使用:ls .git/objects/ 来查看objects中的文件:

4e  70  e6  info  pack

为什么是这个,其实从树上就能得到答案。

我们可以通过:git cat-file 命令来查看版本库中的内容:

输入下面的命令:

git cat-file -p 4e65c55222473e05e72338d3ba75a101a6a56d56

我们得到了:

tree 70ea63592ac4de5f9aec6b15273c4dd5cc0cd00f

3.修改文件

查看在上次提交之后是否有对文件进行再次修改:

git status

查看工作区文件与暂存区或版本库文件的差异:

//工作区与暂存区差异
git diff [文件]
//工作区与版本库差异
git diff HEAD -- [文件]

4.版本回退

git reset 命令用于回退版本,其后面还有几个可选项:

git reset [--soft | --mixed | --hard] [HEAD]
工作区暂存区版本库选项
原本file1、file2file1、file2file1、file2
回退后file1、file2file1、file2file1--soft
回退后file1、file2file1file1--mixed
回退后file1file1file1--hard

其中 --mixed 是默认选项。

上面表格不难理解,举个例子如果我们使用了 --soft,那么只有版本库回退了,工作区和暂存区都没有回退。

HEAD选项:

commit id回退到指定版本
HEAD表示当前版本
HEAD^表示上一个版本
HEAD~1表示上一个版本
HEAD~2表示上上一个版本

5.删除文件

删除工作区和暂存区的文件:

git rm 文件名

二.分支管理

1.分支是什么

每次commit,git会根据时间形成一条“时间线”,这条时间线就是分支。git里面有一条主分支,master分支。HEAD指向master。

2.基本操作

1)查看分支

git branch

2)创建分支

git branch 分支名

比如我们创建一个dev分支:

此时再查看分支:

3)切换分支

git checkout 分支名

切换完后,HEAD就会指向切换的分支,比如我们切换到了dev分支:

 如果这个时候我们修改了某个文件,并且add和commit了,那么就会变成这样:

如果此时我们切回master,打开刚刚修改文件,我们就会发现文件没有被修改。原因从图上也能看出,master跟dev指向的根本就不是一个东西。修改的只是dev分支的文件,master分支没有被修改。

4)合并分支

像刚刚上面的例子,只有dev分支文件被修改了,我们想要将这个修改合并到master分支。

第一步,我们要先切换到master分支。

第二步,合并:

git merge dev

5)删除分支

git branch -d 分支名

这里要注意,我们要删除某一个分支,HEAD一定不能指向这个分支,如果指向这个分支是删不了的。

还有,如果这个分支的没有被合并,这个时候使用上面的方法是删不掉分支的,我们要这样写强制删除分支:

git branch -D 分支名

3.合并冲突

我们在dev分支修个了file1文件,同时也在master分支修改了file1文件,如果将这两个分支合并就会发生冲突,git根本就不知道该听谁的,是要dev分支的修改还是master分支的修改。这就是合并冲突。

我们的解决办法也很原始,手动删。

当出现冲突报错后,再打开file1文件就会发现文件内容变成这样了:

 <<< ==== >>>这些符号是用来向我们区分不同分支的冲突的。我们只需要留下我们真正需要的内容即可。

修改完后我们要再次add和commit一次,这个一定不能漏。

我们使用下面的命令也可以参看到这个结构:

 git log --graph --pretty=oneline --abbrev-commit

4.合并模式

在没有合并冲突的情况下,git会优先使用Fast forward模式。这个模式有一个问题,在我们删除合并完删除分支后,会丢失分支信息,我们无法知道最新的commit是不是合并出来的。

为了解决这个问题,我们要使用普通模式:

 
git merge --no-ff -m "" 分支名

三.远程操作

前面的操作其实都是在本地操作的,我们在实际开发时,不可能所有人都在一台设备上操作,每个人一台独立的设备,都在自己的设备上进行开发。这个时候就需要一个远程仓库,每个将写的代码提交到远程仓库中,远程仓库可以自己搭建,也可以是使用GitHub或Gitee等。

下面使用Gitee做示范。

1.克隆远程仓库

打开右上角克隆/下载,里面会有:

为什么可以选择使用上面的地址克隆。

这里只以HTTPS和SSH为例。

对于HTTPS,操作很简单,只需要将上面的地址复制:

git clone 地址

2.推送到远程仓库

将远程克隆到本地后,我们可以使用命令将本地仓库的代码推送到远程仓库中:

git push 远程主机名 本地分⽀名:远程分⽀名

# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号
git push 远程主机名 本地分⽀名

比较常见的就是下面这个:

git push origin master

3.拉取远程仓库

如果别人修改了代码并提交到远程仓库,我们要与远程仓库的代码同步,这个时候就要使用拉取操作了:

git pull 远程主机名 本地分⽀名:远程分⽀名

# 如果本地分⽀名与远程分⽀名相同,则可以省略冒号
git pull 远程主机名 本地分⽀名

git pull 命令其实执行了两个操作,一个是从远程仓库拉取代码,一个是与本地分支合并。

4.配置git

1)忽略特殊文件

在我们初始化仓库的时候,我们添加了一个 .gitignore文件:

写入这个文件的文件在使用 git add . 时就不会一起提交了。

比如我们想忽略所有 .ini 结尾的文件,那么我们就可以写:

*.ini

如果我们在忽略的文件中 a.ini 我们是想让其提交的,这个时候我们可以写:

*.ini
!a.ini

2)命令配置别名

比如我们想给 git status 起一个别名:

git config [--global] alias.st status

此时我们使用 git st 与使用 git status 的效果是一样的。

我们配置完命令后,原来的命令还是可以用的,其与我们的配置是并存的。

四.标签管理

标签tag,可以简单的理解是某次commit的一个标识,相当于起了一个别名。

1.创建标签

先切换到要创建标签的分支,然后创建标签:

git tag 标签名

创建完后我们可以使用 git tag 来查看我们创建的标签,但是要注意标签不是按时间顺序列出,而是按字母排序的。

2.操作标签

删除本地标签:

git tag -d 标签名

删除远程仓库标签:

 git push origin :refs/tags/标签名

将本地标签推送到远程仓库:
 

git push origin 标签名
# 将全部标签推送
git push origin --tags

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

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

相关文章

计算机网络——传输层(Udp)

udp UDP&#xff08;User Datagram Protocol&#xff0c;用户数据报协议 &#xff09;是一种无连接的传输层协议&#xff0c;它在IP协议&#xff08;互联网协议&#xff09;之上工作&#xff0c;为应用程序提供了一种发送和接收数据报的基本方式。以下是UDP原理的详细解释&…

图解Java设计模式

1、设计模式面试题 2、设计模式的重要性 3、7大设计原则介绍 3.1、单一职责原则

wsl2+ubuntu22.04安装blender教程(详细教程)

本章教程介绍,如何在Windows操作系统上通过wsl2+ubuntu安装blender并运行教程。Blender 是一款免费、开源的 ​​3D 创作套件​​,广泛应用于建模、动画、渲染、视频编辑、特效制作等领域。它由全球开发者社区共同维护,支持跨平台(Windows、macOS、Linux),功能强大且完全…

Spring AI Alibaba MCP 市场正式上线!

Spring AI Alibaba 正式上线 MCP 市场&#xff1a;Spring AI Alibaba-阿里云Spring AI Alibaba官网官网。 开发者可以在这里搜索市面上可用的 MCP Server 服务&#xff0c;了解每个服务的实现与接入方法。 MCP 市场是做什么的&#xff1f; Spring AI Alibaba MCP 当前主要提供…

【Hadoop入门】Hadoop生态圈概述:核心组件与应用场景概述

1 Hadoop生态圈概述 Hadoop生态圈是以 HDFS&#xff08;分布式存储&#xff09; 和 YARN&#xff08;资源调度&#xff09; 为核心&#xff0c;围绕大数据存储、计算、管理、分析等需求发展出的一系列开源工具集合。 核心特点&#xff1a; 模块化&#xff1a;各组件专注解决特定…

致远OA —— 表单数据获取(前端)

文章目录 :apple: 业务需求描述 &#x1f34e; 业务需求描述 测试案例&#xff1a; https://pan.quark.cn/s/3f58972f0a27 官网地址&#xff1a; https://open.seeyoncloud.com/v5devCAP/94/355/359/399/405/406.html 需求描述&#xff1a; 点击获取数据接口&#xff0c;…

游戏引擎学习第214天

总结并为当天的任务做好准备 昨天&#xff0c;我们将所有调试控制代码迁移到使用新的调试接口中&#xff0c;但我们没有机会实际启用这些代码。我们做了很多准备工作&#xff0c;比如规划、将其做成宏、并将其放入调试流中&#xff0c;但实际上我们还没有办法进行测试。 今天…

使用stm32cubeide stm32f407 lan8720a freertos lwip 实现udp client网络数据转串口数据过程详解

1前言 项目需要使用MCU实现网络功能&#xff0c;后续确定方案stm32f407 外接lan8720a实现硬件平台搭建&#xff0c;针对lan8720a也是用的比较多的phy&#xff0c;网上比较多的开发板&#xff0c;硬件上都是选用了这个phy&#xff0c;项目周期比较短&#xff0c;选用了这个常用…

Go:入门

文章目录 Hello, World命令行参数找出重复行GIF动画获取一个URL并发获取多个URL一个 Web 服务器其他 Hello, World Hello world package main import "fmt" func main() {fmt.Println("Hello, 世界") }package main表明这是一个可独立执行的程序包&#…

Cloudflare教程:免费优化CDN加速配置,提升网站访问速度 | 域名访问缓存压缩视频图片媒体文件优化配置

1、启用 Tiered Cache 缓存开关&#xff1a;通过选择缓存拓扑&#xff0c;可以控制源服务器与 Cloudflare 数据中心的连接方式&#xff0c;以确保缓存命中率更高、源服务器连接数更少&#xff0c;并且 Internet 延迟更短。 2、增加浏览器缓存时间TTL&#xff1a;在此期间&#…

C/C++共有的类型转换与c++特有的四种强制类型转换

前言 C 语言和 C 共有的类型转换&#xff1a; 自动类型转换&#xff08;隐式类型转换&#xff09;&#xff1a; 编译器在某些情况下会自动进行的类型转换。强制类型转换&#xff08;显示类型转换&#xff09;&#xff1a; 使用 (type)expression 或 type(expression) 语法进行…

【蓝桥杯】贪心算法

1. 区间调度 1.1. 题目 给定个区间,每个区间由开始时间start和结束时间end表示。请选择最多的互不重叠的区间,返回可以选择的区间的最大数量。 输入格式: 第一行包含一个整数n,表示区间的数量 接下来n行,每行包含两个整数,分别表示区间的开始时间和结束时间 输出格式:…

OSPF接口的网络类型和不规则区域

网络类型(数据链路层所使用的协议所构建的二层网络类型) 1、MA --- 多点接入网络 BMA --- 支持广播的多点接入网络 NBMA --- 不支持广播的多点接入网络 2、P2P --- 点到点网络 以太网 --- 以太网最主要的特点是需要基于MAC地址进行物理寻址&#xff0c;主要是因为以太网接口所连…

idea 创建 maven-scala项目

文章目录 idea 创建 maven-scala项目1、创建普通maven项目并且配置pom.xml文件2、修改项目结构1&#xff09;创建scala目录并标记成【源目录】2&#xff09;导入scala环境3&#xff09;测试环境 idea 创建 maven-scala项目 1、创建普通maven项目并且配置pom.xml文件 maven依赖…

ansible+docker+docker-compose快速部署4节点高可用minio集群

目录 github项目地址 示例服务器列表 安装前 修改变量文件group_vars/all.yml 修改ansible主机清单 修改setup.sh安装脚本 用法演示 安装后验证 github项目地址 https://github.com/sulibao/ansible_minio_cluster.git 示例服务器列表 安装前 修改变量文件group_var…

使用libcurl编写爬虫程序指南

用户想知道用Curl库编写的爬虫程序是什么样的。首先&#xff0c;我需要明确Curl本身是一个命令行工具和库&#xff0c;用于传输数据&#xff0c;支持多种协议。而用户提到的“Curl库”可能指的是libcurl&#xff0c;这是一个客户端URL传输库&#xff0c;可以用在C、C等编程语言…

K8S学习之基础七十五:istio实现灰度发布

istio实现灰度发布 上传镜像到harbor 创建两个版本的pod vi deployment-v1.yaml apiVersion: apps/v1 kind: Deployment metadata:name: appv1labels:app: v1 spec:replicas: 1selector:matchLabels:app: v1apply: canarytemplate:metadata:labels:app: v1apply: canaryspec…

【设备连接涂鸦阿里云】

设备连接涂鸦阿里云 ■ Tuya IoT on Alibaba Cloud■ 控制台操作步骤■ 1. 创建产品■ 2. 添加设备■ 3. 添加设备■ 4. 获取设备MQTT连接参数 ■ MQTTX使用教程■ 1&#xff0c;先在 Tuya IoT on Alibaba Cloud 新建产品和设备■ 2&#xff0c;MQTTX 设置■ 3&#xff0c;MQTT…

c语言学习16——内存函数

内存函数 一、memcpy使用和模拟实现1.1参数1.2 使用1.3 模拟实现 二、memmove使用和模拟实现2.1 参数2.2 使用2.3 模拟实现 三、memset使用3.1 参数3.2 使用 四、memcmp使用4.1 参数4.2 使用 一、memcpy使用和模拟实现 1.1参数 因为内存中不知道存的是什么类型的地址&#xff…

渗透测试实战:使用Hydra破解MySQL弱口令(附合法授权流程+防御方案)

渗透测试实战&#xff1a;使用Hydra破解MySQL弱口令&#xff08;附合法授权流程防御方案&#xff09; 郑重声明&#xff1a;本文仅供安全学习研究&#xff0c;任何未经授权的网络攻击行为均属违法。实操需获得目标系统书面授权&#xff0c;请遵守《网络安全法》相关规定。 一、…