当前位置: 首页 > news >正文

Git基础教程

一、Git简介

1、什么是Git?

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。
Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。
Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式,不用服务器端软件支持。

2、Git的特点

Git是目前世界上最先进的分布式版本控制系统,在处理各种项目时,都十分高效,而且非常的高大上。
集中式与分布式的区别
除了git还有svn、cvs这样的版本控制系统,它们的区别在于一个是分布式一个是集中式

3、集中式就是svn和csv这样的版本控制系统,分布式是git

区别在于集中式的版本控制系统每次在写代码时都需要从服务器中拉取一份下来,并且如果服务器丢失了,那么所有的就都丢失了,你本机客户端仅保存当前的版本信息,换句话说,集中式就是把代码放在一个服务器上集中管理,你的所有回滚等操作都需要服务器的支持。

分布式的区别在于,每个人的电脑都是服务器,当你从主仓库拉取一份代码下来后,你的电脑就是服务器,无需担心主仓库被删或者找不到的情况,你可以自由在本地回滚,提交,当你想把自己的代码提交到主仓库时,只需要合并推送到主仓库就可以了,同时你可以把自己的代码新建一份仓库分享给其它人。

像集中式它们都有一个主版本号,所有的版本迭代都以这个版本号为主,而分布式因为每个客户端都是服务器,git没有固定的版本号,但是有一个由哈希算法算出的id,用来回滚用的,同时也有一个master仓库,这个仓库是一切分支仓库的主仓库,我们可以推送提交到master并合并到主仓库上,主仓库的版本号会迭代一次,我们客户端上的git版本号无论迭代多少次,都跟master无关,只有合并时,master才会迭代一次。

4、Git下载安装

在使用Git前我们需要先安装 Git。Git 目前支持 Linux/Unix、Solaris、Mac和 Windows 平台上运行。
本篇我们只介绍在Windows下安装Git,Git 各平台安装包下载地址为:http://git-scm.com/downloads

下载好,按默认安装即可(推荐安转在D盘中)。安装完成后,在开始菜单里找到“Git”->“Git Bash”,双击蹦出一个类似命令行窗口的东西,
在这里插入图片描述
输入git --version显示版本(也可以在cmdDOS窗口中测试),就说明Git安装成功!

5、Git配置

完成后在命令行输入:

  1. 配置git环境

config:参数是用来配置git环境的
–global:长命令表示配置整个git环境

初次使用git需要设置你的用户名以及邮箱,这将作为当前机器git的标识,如果你用它来下载远程仓库一些需要登录权限的仓库会要求登录,git默认使用配置邮箱以及用户名登入,但会要求你手动输入密码

用户名配置

// user代表用户,.name代表配置用户的名称git config --global user.name "你的用户名"

邮箱配置

user代表用户,.email代表配置用户的邮箱git config --global user.email "你的邮箱"

查看配置信息:
要检查已有的配置信息,可以使用 git config --list 命令:

$ git config --list

也可以单独查看某项配置:

$ git config user.name
$ git config user.email

6、Git 工作区、暂存区和版本库

  • Workspace工作区: 就是你电脑里能看到目录;
  • Index / Stage暂存区: 一般放在.git(可隐藏文件)目录下的index文件(.git/index)中,所以我们把暂存区有时候也叫做索引(index);
  • 版本库: 工作区有一个隐藏目录,.git,这个实际上是Git的本地版本仓库。
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

7、gitee开发文档

https://help.gitee.com/repository/ssh-key/generate-and-add-ssh-public-key

二、Git基本命令操作

1、Git基本命令操作

$ mkdir learngit    #创建
$ cd learngit       #切换
$ pwd               #显示当前盘符路径    /d/gitspace/learngitgit init	版本库初始化
git add	添加至暂存区
git commit	提交
git status	显示本地仓库状态
git checkout 撤回
git reflog	查看历史记录
git reset --hard 版本穿梭
git push	推送至远程版本库
git clone	克隆版本库
git pull	拉回远程版本库的提交
git merge	分支合并
git rebase	分支变基
git log	显示提交日志
git rm	撤回添加

2、创建本地空仓库:git init

首先我们选择一个合适的位置,创建一个空目录

然后通过git init命令把这个目录变成Git可以管理的仓库:

git init

这个目录是Git用来跟踪管理版本仓库的,千万不要乱修改和删除这个目录中任意文件,否则这个git仓库就被你破坏了。

如果你看不到这个.git文件,使用命令ls -ah就可以看到隐藏的文件了。

3、把文件添加到版本库

  1. 把文件添加到版本库
    版本控制系统可以记录你每次的改动

  2. 创建一个文件readme.txt

  3. 将文件提交到本地git版本仓库中
    查看当前状态:

$ git status      #查看当前git状态(新建了一个文件)

在这里插入图片描述

  • 第一步添加到暂存区:
$ git add readme.txt      #添加到暂存区

再查看状态:
在这里插入图片描述

  • 从暂存区删除
git rm  --cached readme.txt
  • 第二步提交到本地版本仓库
$ git commit -m "wrote a readme file"  readme.txt

在这里插入图片描述

git commit -m "记录提交内容"命令,-m 后面写的是本次提交的记录内容,也可以不写。

然后再再次查看状态(没有可提交的文件)

4、版本回退

查看历史记录,使用git log命令

  1. 回滚到指定历史版本
git reset --hard 要回滚id
  1. 回滚当前仓库指向的版本
    HEAD是指向当前仓库的,历史版本中可能有别的分支,我们只想迭代我们仓库的上一个版本,这个很简单,我们只需要用HEAD来指向就可以了
git reset --hard HEAD^
  1. 查看版本信息
    git reflog命令查看每个版本的commit id,直接git reset --hard commit_id即可。

5、Git的管理与修改

  • 对readme.txt文件做修改,添加两行新内容:
  • 然后将readme.txt添加到暂存区git add $ git add readme.txt
  • 这个时候我们先不提交readme.txt,而是再做一次修改,将最后一行内容稍作修改
  • 这个时候我们不再添加到暂存区了,而是直接git commit提交到本地版本仓库 $ git commit -m “git tracks changes”
  • 会发现上述我们明明提交了,然后文件仍然是处于修改的状态,原因就是因为我们第二次做的修改没有添加到暂存区中,git commit命令没有追踪到待提交的第二次修改内容


    查询修改的区别
  • 这个时候我们使用一个新命令git diff HEAD – readme.txt(注意中间的空格),来对比我们此时工作区和git本地版本仓库中的readme.txt文件的区别:
    接着git add,然后git commit在,这样就提交了;

6、版本穿梭

回到之前的版本 git reset --hard id

在这里插入图片描述

7、分支操作

分支操作

  • 创建分支:git branch 分支名
  • 查看分支 git branch -v
  • 切换分支git checkout 分支名
  • 合并分支 git merge 分支名
  • 删除分支 git branch -d 分支名
  1. 查看分支
git branch -v
* master  cdc4028 first commit
  1. 创建分支
git branch testinggit branch -v
* master  cdc4028 first committesting cdc4028 first commit
  1. 切换分支
git checkout testing
Switched to branch 'testing'
M       a.txtgit branch -vmaster  cdc4028 first commit
* testing cdc4028 first commit
  1. 合并分支
git merge com master  # com是新建分支   master主分支Updating 6ac5213..a8c3466
Fast-forwardhello.txt | 5 ++++-1 file changed, 4 insertions(+), 1 deletion(-)
  1. 删除分支
$ git branch -D testing
Deleted branch testing (was cdc4028)$ git branch -v
* master cdc4028 first commit

相关文章:

Git基础教程

一、Git简介 1、什么是Git? Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。 Git与常用的版本控制工具CVS、Subversion等不同&#…...

stm32外部时钟为12MHZ,修改代码适配

代码默认是8MHZ的,修改2个地方: 第一个地方是这个文件的这里: 第二个地方是找到这个函数: 修改第二个地方的这里:...

【数据结构】八大排序

目录 1. 排序的概念及其作用 1.1 排序的概念 1.2 排序运用 1.3 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想 2.1.2 直接插入排序 2.1.3 希尔排序(缩小增量排序) 2.2 选择排序 2.2.1 基本思想 2.2.2 直接选择排序 2.2…...

MYSQL(事务+锁+MVCC+SQL执行流程)理解

一)事务的特性: 一致性:主要是在数据层面来说,不能说执行扣减库存的操作的时候用户订单数据却没有生成 原子性:主要是在操作层面来说,要么操作完成,要么操作全部回滚; 隔离性:是自己的事务操作自己的数据,不会受到到其…...

解密一致性哈希算法:实现高可用和负载均衡的秘诀

解密一致性哈希算法:实现高可用和负载均衡的秘诀 前言第一:分布式系统中的数据分布问题,为什么需要一致性哈希算法第二:一致性hash算法的原理第三:一致性哈希算法的优点和局限性第四:一致性哈希算法的安全性…...

Python脚本:让工作自动化起来

Python是一种流行的编程语言,以其简洁和易读性而闻名。它提供了大量的库和模块,使其成为自动化各种任务的绝佳选择。 本文将探讨Python脚本及其代码,可以帮助您自动化各种任务并提高工作效率。无论您是开发人员、数据分析师还是只是想简化工…...

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—广州大学城专场!!!(暨全额奖学金政策)

香港科技大学广州|可持续能源与环境学域博士招生宣讲会—广州大学城专场!!!(暨全额奖学金政策) “面向未来改变游戏规则的——可持续能源与环境学域” ���专注于能源环…...

uni-app:多种方法写入图片路径

一、文件在前端文件夹中 1、相对路径引用 从当前文件所在位置开始寻找图片文件的路径。../../ 表示返回两级目录,即从当前文件所在的 wind.vue 所在的位置开始向上回退两级。接着,进入 static 目录,再进入 look 目录,最后定位到 …...

共谋工业3D视觉发展,深眸科技以自研解决方案拓宽场景应用边界

随着中国工业领域自动化程度逐渐攀升,“机器换人”这一需求进一步提升。在传统2D工业视觉易受环境光干扰、无法进一步获取物体深度信息的限制条件下,工业3D视觉凭借着更强的空间和深度感知能力,以及通过点云数据获取物体距离和三维坐标信息的…...

前端面试基础面试题——11

1.什么是 vue 的计算属性? 2.vue怎么实现页面的权限控制 3.watch的作用是什么 4.响应式系统的基本原理 5.vue-loader 是什么?使用它的用途有哪些? 6.vuex 工作原理详解 7.vuex 有哪几种属性? 8.什么是 MVVM? 9…...

SQL server中内连接和外连接的区别、表达(表的连接)

SQL server中内连接与外连接的区别、表达 区别表达内连接外连接 待续 首先,内连接和外连接都是对表的连接操作 区别 内连接:连接结果仅包含符合连接条件的行,其中至少一个属性是共同的;注意区分在嵌套查询时使用的any以及all的区…...

Linux中的shell外壳与权限(包含目录文件的权限,粘滞位的来龙去脉)

Linux中的shell外壳与权限[包含目录文件的权限,粘滞位的来龙去脉] 一.shell外壳的理解1.为什么需要有shell外壳的存在?2.什么是shell外壳?3.shell外壳的运行原理是什么?4.shell和bash的关系 二.Linux中的用户权限1.用户分类与身份切换1.用户分类2.root用户切换为普通用户1.s…...

力扣第45题 跳跃游戏II c++ 贪心算法

题目 45. 跳跃游戏 II 中等 相关标签 贪心 数组 动态规划 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处…...

1024动态

感叹一下当前行情 从事码农这些年今年是最难的一年...

中心胖AP(AD9430DN)+远端管理单元RU(R240D)+出口网关,实现组网

适用于:V200R008至V200R019C00版本的万兆中心胖AP(AD9431DN-24X)。 组网规划 RU管理:VLAN 100,网段为192.168.100.0/24。 无线业务:VLAN 3,SSID为“wlan-net”,密码为“88888888”…...

shell_45.Linux在脚本中使用 getopt

在脚本中使用 getopt $ cat extractwithgetopt.sh #!/bin/bash # Extract command-line options and values with getopt # set -- $(getopt -q ab:cd "$") # echo while [ -n "$1" ] do case "$1" in -a) echo "Found the -a opt…...

2023-8-20 CVTE视源股份后端开发实习一面

自我介绍 操作系统 1 有了解进程和线程的特点吗 2 在linux层面的话是怎么创建一个进程或者一个线程的(具体的系统调用的命令) 答: 3 如果是java层面讲,怎么去启动一个线程,要实现哪些方法呢 Thread类实现run()方法的…...

二叉树进阶

欢迎来到Cefler的博客😁 🕌博客主页:那个传说中的man的主页 🏠个人专栏:题目解析 🌎推荐文章:题目大解析(3) 目录 👉🏻二叉搜索树概念 &#x1f4…...

前端性能优化 - 虚拟滚动

一 需求背景 需求:在一个表格里面一次性渲染全部数据,不采用分页形式,每行数据都有Echart图插入。 问题:图表渲染卡顿 技术栈:Vue、Element UI 卡顿原因:页面渲染时大量的元素参与到了重排的动作中&#x…...

手写 Promise(1)核心功能的实现

一:什么是 Promise Promise 是异步编程的一种解决方案,其实是一个构造函数,自己身上有all、reject、resolve这几个方法,原型上有then、catch等方法。 Promise对象有以下两个特点。 (1)对象的状态不受…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

linux 错误码总结

1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

【HTTP三个基础问题】

面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

push [特殊字符] present

push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...