Git——分布式版本控制工具使用教程

news2025/3/22 3:13:37

本文主要介绍两种版本控制工具——SVN和Git的概念,接着会讲到Git的安装,Git常用的命令,以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。如果想直接上手用Vscode操作远程仓库则直接看7和9即可!

目录

1. SVN和Git介绍

1.1 SVN 

1.2 Git 

2.Git工作流程

3.Git安装与配置

3.1 Git安装

3.2 Git配置 

3.2.1 设置用户

3.2.2 为常用命令设置别名

3.2.3 解决GitBash乱码问题

4. 获取本地库

5.常用的基本命令 

5.1 查看暂存区和工作区修改的状态(status)

5.2 将修改过后的文件添加到暂存区(add)

5.3 将暂存区内容提交到本地仓库(commit) 

5.4 查看提交日志(log)

5.5 版本回退(reset)

5.6 添加文件至忽略列表 

6. 分支 

6.1 查看所有分支(branch)

6.2 创建并切换到分支(不要-b,就是只创建) 

6.3 合并分支(merge) 

6.4 删除分支

6.5 解决冲突

7. 配置远程仓库

7.1 注册码云

7.2 创建远程仓库 

7.3 配置SSH公钥

8. 操作远程仓库

8.1 添加远程仓库

8.2 查看远程仓库 

8.3 推送到远程仓库

8.4 本地分支与远程分支的关联关系

8.5 从远程仓库克隆 

8.6 从远程仓库中抓取和拉取 

8.7 解决合并冲突 

9. Vscode使用Git


1. SVN和Git介绍

1.1 SVN 

        集中式版本控制工具,版本库是集中存放在中央服务器的,团队里每个人工作时从中央服务器下载代码,是必须联网才能工作,局域网或互联网。

1.2 Git 

        分布式版本控制系统没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样工作的时候,无需要联网了,因为版本库就在你自己的电脑上。

2.Git工作流程

        你作为一名新人,进到了公司,公司发给你了远程仓库的链接,以及账号密码,接下来你只需要按照git的工作流程来就行了。

  1. clone: 从远程仓库把代码克隆到本地,也就是你的计算机上
  2. checkout: 为了避免直接在master主分支上进行开发,通常会创建一个新的分支,在这个分支上操作,不会影响到主分支
  3. add: 你今天写完了代码,先提交到暂存区(分阶段审查,这样能精细化控制版本)
  4. commit: 提交到本地仓库。本地仓库中保存修改的各个历史版本
  5. pull: 你想要推送本地更改的时候,最好先从远程仓库拉取到最新的更改,万一有人跟你动了同一行代码,你就得需要手动解决冲突。或者你是旧版本的代码,直接推送会导致版本历史分叉,触发冲突。pull相当于fetch+merge
  6. push: 将本地的提交推送到远程仓库

3.Git安装与配置

3.1 Git安装

下载地址:Git - Downloads

得到下面这样的安装包: 

除了安装位置调整外,一直点下一步就行:

安装成功后,可以右键看一下有没有这两个东西,有的话就是安装成功了。

备注:

Git GUI:Git提供的图形界面工具  Git Bash:Git提供的命令行工具

3.2 Git配置 

3.2.1 设置用户

1.打开Git Bash

2.设置用户名和邮箱

git config --global user.name “yqd”

git config --global user.email "你的邮箱@xx.com"

查看用户名和邮箱

git config --global user.name

git config --global user.email

3.2.2 为常用命令设置别名

有些常用的指令参数非常多,每次都要输入好多参数,我们可以使用别名。

1. 打开用户目录,创建 .bashrc 文件

touch ~/.bashrc 

 

2.用vi命令编辑.bashrc文件

vi .bashrc

3.按 “i” 键输入如下内容 ,输入完成先按ESC,输入 :wq! 退出

#用于输出git提交日志

alias git-log='git log --pretty=oneline --all --graph --abbrev-commit'

4. 执行 source ~/.bashrc

source ~/.bashrc 

3.2.3 解决GitBash乱码问题

1.打开Git Bash执行下面命令

git config --global core.quotepath false 

2.${git_home}/etc/bash.bashrc 文件最后加入下面两行

export LANG="zh_CN.UTF-8"

export LC_ALL="zh_CN.UTF-8"

4. 获取本地库

 要使用Git对我们的代码进行版本控制,首先需要获得本地仓库

1.先建一个文件夹(例如test)

2.进入这个文件,右键打开Git Bash

3.执行命令git init

4.如果创建本地仓库成功,就会在文件夹下看到隐藏的.git目录

5.常用的基本命令 

5.1 查看暂存区和工作区修改的状态(status)

git status

5.2 将修改过后的文件添加到暂存区(add)

#单个文件

git add  文件名

#多个文件

git add .

5.3 将暂存区内容提交到本地仓库(commit) 

git commit -m '注释内容'

5.4 查看提交日志(log)

git log [option]     (若之前配置过git-log命令,可以直接使用,就不用手动写这些选项)

  • options

--all 显示所有分支

--pretty=oneline 将提交信息显示为一行

--abbrev-commit 使得输出的commitId更简短

--graph 以图的形式显示

5.5 版本回退(reset)

当弄错了,可以通过reset实现版本的切换,commitID 可以使用 git-log 或 git log 指令查看 

git reset --hard commitID

当你版本回退之后,你看不到后面的提交记录。那如何查看你执行回退之前的提交记录? 

git reflog 

5.6 添加文件至忽略列表 

一般有些文件我们不想提交,比如说生成的日志文件等等,那么我们可以在工作目录中创建一个名为 .gitignore 的文件(文件名称固定),列出要忽略的文件模式。下面是一个示例:

# --------------------------
# 编辑器/IDE
# --------------------------
# VS Code
.vscode/       # VS Code 工作区配置
!.vscode/settings.json  # 例外:允许提交共享的 settings.json

# IntelliJ
.idea/         # JetBrains IDE 配置目录
*.iml          # 项目模块文件

# Vim
*.swp          # Vim 交换文件
*.swo


# --------------------------
# 日志/编译产物
# --------------------------
logs/          # 日志目录(所有日志文件)
*.log          # 所有后缀为 .log 的文件
dist/          # 前端项目构建目录
build/         # 编译产物目录


# --------------------------
# 测试相关
# --------------------------
coverage/      # 测试覆盖率报告
.junit_results # 单元测试结果


# --------------------------
# 特殊文件
# --------------------------
.env           # 环境变量文件(永远不要提交!)
secret.key     # 密钥文件
*.bak          # 备份文件

6. 分支 

        几乎所有的版本控制系统都以某种形式支持分支。 使用分支可以把你的工作从开发主线上分离开来进行重大的Bug修改、开发新的功能,以免影响开发主线。下面示例让你更好理解分支:

从 M2 版本开始分支,最后将 M3 和 F2 进行合并,成为了 M4 版本

6.1 查看所有分支(branch)

git branch 

6.2 创建并切换到分支(不要-b,就是只创建) 

 git checkout -b 分支名

6.3 合并分支(merge) 

#将其他分支合并到当前分支

git merge 其他分支名

6.4 删除分支

 不能删除当前分支,只能删除其他分支

git branch -d b1 删除分支时,需要做各种检查

git branch -D b1 不做任何检查,强制删除

6.5 解决冲突

当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突步骤如下:

1. 处理文件中冲突的地方

2. 将解决完冲突的文件加入暂存区(add)

3. 提交到仓库(commit)

示例如下:

7. 配置远程仓库

7.1 注册码云

由于访问国外的GitHub比较慢,我们选择国内的Gitee作为远程仓库。

码云地址:Gitee - 基于 Git 的代码托管和研发协作平台

7.2 创建远程仓库 

7.3 配置SSH公钥

1.在GitBash用下面命令生成公钥,不断回车(如果公钥已经存在,则自动覆盖)

ssh-keygen -t rsa 

2. 获取公钥

cat ~/.ssh/id_rsa.pub 

3.添加公钥 

 4.验证公钥

 ssh -T git@gitee.com

8. 操作远程仓库

8.1 添加远程仓库

#远端名称默认为origin   仓库路径-点"我的",仓库那里切换到SSH可以查看

git remote add 远端名称 仓库路径 

8.2 查看远程仓库 

git remote 

8.3 推送到远程仓库

-f 表示强制覆盖(慎用)

--set-upstream 推送到远端的同时并且建立起和远端分支的关联关系

如果远程分支名和本地分支名称相同,则可以只写本地分支

git push --set-upstream 远程仓库名 本地分支名:远程分支名 

查看远程仓库

8.4 本地分支与远程分支的关联关系

git branch -vv

8.5 从远程仓库克隆 

仓库路径可在"克隆/下载"处查看   本地目录可省略,会自动生成一个 

git clone 仓库路径 本地目录 

8.6 从远程仓库中抓取和拉取 

#抓取指令就是将仓库里的更新都抓取到本地,不会进行合并

#如果不指定远端名称和分支名,则抓取所有分支

git fetch 远程仓库名 远程分支名

#拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge
#如果不指定远端名称和分支名,则抓取所有并更新当前分支

git pull 远程仓库名 远程分支名

8.7 解决合并冲突 

打工人one在本地修改代码后优先推送到远程仓库,此时打工人two在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时two晚于one,故需要先拉取远程仓库的提交,经过合并后才能推送到远端分支

远程分支也是分支,所以合并时冲突的解决方式也和解决本地分支冲突相同相同

9. Vscode使用Git

9.1 在Gitee建立仓库并配置公钥 

请看7.2 和7.3

9.2 在vscode中克隆仓库

9.3 操作仓库 

 1.建立文件,编写代码

2.添加,并提交 

3.拉取和推送 

 9.4 版本回退

如果想回去,也可以

总结

        Git 确实很有用,让版本控制自如,结合Vscode编码,真的很不错,希望本文能帮助到你! 

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

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

相关文章

【数据分析】数据筛选与访问行列元素3

访问元素 .loc属性可以通过传入index的值访问行数据。 .loc属性允许传入两个参数,分别是index的值和columns的值,参数间用“逗号”隔开,这样便可以访问数据中的元素。 1. 访问单个元素 访问单个元素比较简单,只需要通过它的in…

爬虫——playwright获取亚马逊数据

目录 playwright简介使用playwright初窥亚马逊安装playwright打开亚马逊页面 搞数据搜索修改bug数据获取翻页优化结构 简单保存 playwright简介 playwright是微软新出的一个测试工具,与selenium类似,不过与selenium比起来还是有其自身的优势的&#xff…

大数据学习(77)-Hive详解

🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…

汽车一键启动PKE无钥匙系统

移动管家汽车一键启动PKE舒适无钥匙遥控远程系统是一种集成了多项先进功能的汽车电子系统,主要目的是提高驾驶便利性和安全性。 以下是该系统的具体功能: 功能类别 功能描述 无钥匙进入 感应无钥匙进入(自动感应开关门) 一…

Postman 新手入门指南:从零开始掌握 API 测试

Postman 新手入门指南:从零开始掌握 API 测试 一、Postman 是什么? Postman 是一款功能强大的 API 开发与测试工具,支持 HTTP 请求调试、自动化测试、团队协作等功能。无论是开发人员还是测试工程师,都可以用它快速验证接口的正确…

猿大师中间件:如何在最新Chrome浏览器Web网页内嵌本地OCX控件?

OCX控件是ActiveX控件的一种,主要用于在网页中嵌入复杂的功能,如图形渲染、多媒体播放等,可是随着谷歌Chrome等主流浏览器升级,目前已经不支持微软调用ActiveX控件了,如果想调用OCX控件用IE浏览器或者国产双擎浏览器&a…

[数据结构]排序之 归并排序(有详细的递归图解)

一、非递归 基本思想: 归并排序( MERGE-SORT )是建立在归并操作上的一种有效的排序算法 , 该算法是采用分治法( Divide andConquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列&#x…

构建第二个Django的应用程序

构建第二个应用程序 文章目录 构建第二个应用程序1.打开Visual Studio code 左上角 点击fike 点击open folder2.打开上次的Django项目 并按图示点击进入终端3.在下方终端输入创建app01项目的命令 接着在左上方会出现一个app01的项目4.接着在Hellodjango的项目里settings.py中定…

图像分割的mask有空洞怎么修补

分享一个对实例分割mask修补的方法,希望对大家有所帮助。 1. 这是我准备分割的图片 2 分割结果 可以看到衣服部分有一些没分割出来,二值化图片能清晰看到衣服部分有些黑色未分出的地方。 3 补全mask区域 import cv2 import numpy as npdef fill_mask_h…

HarmonyOS NEXT 组件状态管理的对比

在HarmonyOS NEXT开发中,组件状态管理是构建动态用户界面的核心。本文将深入探讨State、Prop、Link和ObjectLink这四种常见的状态管理装饰器,并通过示例代码进行对比分析,以帮助同学们更好地理解和选择合适的状态管理方式。 一、装饰器概述 …

C#通过API接口返回流式响应内容---SignalR方式

1、背景 在上两篇《C#通过API接口返回流式响应内容—分块编码方式》和《C#通过API接口返回流式响应内容—SSE方式》实现了流式响应的内容。 上面的这两个主要是通过HTTP的一些功能,除了这些之外,还有WebSocket的方式。C#中的WebSocket的有比较多的方案&…

vulhub靶机----基于docker的初探索,环境搭建

环境搭建 首先就是搭建docker环境,这里暂且写一下 #在kali apt update apt install docker.io配置docker源,位置在/etc/docker/daemon.json {"registry-mirrors": ["https://5tqw56kt.mirror.aliyuncs.com","https://docker…

AI对话框实现

请注意,功能正在开发中,代码和注释不全 场景:AI对话框实现,后端调用AI大模型。前端发送请求后端返回流式数据,进行一问一答的对话功能(场景和现在市面上多个AI模型差不多,但是没人家功能健全&a…

可视化图解算法:删除链表中倒数第n个节点

1. 题目 描述 给定一个链表,删除链表的倒数第 n 个节点并返回链表的头指针 例如, 给出的链表为: 1→2→3→4→5, n 2. 删除了链表的倒数第 n 个节点之后,链表变为1→2→3→5. 数据范围: 链表长度 0≤n≤1000,链表中任意节点的…

智能汽车图像及视频处理方案,支持视频智能拍摄能力

美摄科技,作为智能汽车图像及视频处理领域的先行者,凭借其卓越的技术实力和前瞻性的设计理念,为全球智能汽车制造商带来了一场视觉盛宴的革新。我们自豪地推出——美摄科技智能汽车图像及视频处理方案,一个集高效性、智能化、画质…

微信小程序的业务域名配置(通过ingress网关的注解)

一、背景 微信小程序的业务域名配置(通过kong网关的pre-function配置)是依靠kong实现,本文将通过ingress网关实现。 而我们的服务是部署于阿里云K8S容器,当然内核与ingress无异。 找到k8s–>网络–>路由 二、ingress注解 …

Matlab 舰载机自动着舰控制系统研究

1、内容简介 Matlab 188-舰载机自动着舰控制系统研究 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略

WindowsAD域服务权限提升漏洞

WindowsAD 域服务权限提升漏洞(CVE-2021-42287, CVE-2021-42278) 1.漏洞描述 Windows域服务权限提升漏洞(CVE-2021-42287, CVE-2021-42278)是由于Active Directory 域服务没有进行适当的安全限制,导致可绕过安…

Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装

Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在 的简单封装 目录 Flutter 学习之旅 之 flutter 使用 SQLite(sqflite) 实现简单的数据本地化 保存/获取/移除/判断是否存在…

【leetcode hot 100 208】实现Trie(前缀树)

解法一:字典树 Trie,又称前缀树或字典树,是一棵有根树,其每个节点包含以下字段: 指向子节点的指针数组 children。对于本题而言,数组长度为 26,即小写英文字母的数量。此时 children[0] 对应小…