Git秘籍大公开:从基础概念到高级技巧的全面解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 在软件开发的征途中,Git如同导航明灯,以其分布式、高效的特性引领着团队前行。本篇博客将带您走进Git的世界,从诞生背景到核心操作流程,一一揭秘。我们将深入讲解工作区、暂存区、仓库区的概念,并详述Git单人本地仓库的操作步骤,包括创建、配置、提交、版本管理等。此外,还将展示Git远程仓库(如Github、Gitee)的协作魅力,通过实例演示项目克隆、多人协作、冲突解决及分支管理等高级技巧。

前言

    在软件开发的征途中,Git如同导航明灯,以其分布式、高效的特性引领着团队前行。本篇博客将带您走进Git的世界,从诞生背景到核心操作流程,一一揭秘。我们将深入讲解工作区、暂存区、仓库区的概念,并详述Git单人本地仓库的操作步骤,包括创建、配置、提交、版本管理等。此外,还将展示Git远程仓库(如Github、Gitee)的协作魅力,通过实例演示项目克隆、多人协作、冲突解决及分支管理等高级技巧。


在这里插入图片描述


一、Git基础介绍

Git 是目前世界上最先进的分布式版本控制系统(没有之一)

1. 作用

  • 源代码管理
    • Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 也是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。

2. 为什么要进行源代码管理?

  • 方便多人协同开发
  • 方便版本控制

    3. Git的诞生

  • 作者是 Linux 之父:Linus Benedict Torvalds
  • 当初开发 Git 仅仅是为了辅助 Linux 内核的开发(管理源代码)

    git 开发时间表:

    • 2005 年 4 月3 日开始开发 git
    • 2005 年 4 月 6 日项目发布
    • 2005 年 4 月 7 日 Git 开始作为自身的版本控制工具
    • 2005 年 4 月 18 日发生第一个多分支合并
    • 2005 年 4 月 29 日 Git 的性能达到 Linux 预期
    • 2005年 7 月 26 日 Linux 功成身退,将 Git 维护权交给 Git 另一个主要贡献者 Junio C Hamano,直到现在

    Git 迅速成为最流行的分布式版本控制系统,尤其是 2008 年,GitHub 网站上线了,它为开源项目免费提供 Git 存储,无数开源项目开始迁移至 GitHub,包括 jQuery,PHP,Ruby 等等。
    国内从2013年 Gitee 代码托管平台上线至推出企业版之前的三年多时间中,Gitee 平台已托管了 2000 万+个仓库,是国内知名的代码托管平台。

4. Git管理源代码特点

  • 1.Git是一种分布式版本管理系统,服务器和客户端都具备版本控制能力,都能执行代码的提交、合并等操作
    在这里插入图片描述
  • 2.Git会在根目录下创建一个.git隐藏文件夹,作为本地代码仓库

5. Git操作流程图解

Git服务器 --> 本地仓库 --> 客户端 --> 本地仓库 --> Git服务器
在这里插入图片描述


二、工作区暂存区和仓库区介绍

在这里插入图片描述

1. 工作区

  • 对于添加修改删除文件的操作,都发生在工作区中

    2. 暂存区

  • 暂存区指将工作区中的操作完成小阶段的存储,是版本库的一部分

3. 仓库区

  • 仓库区表示个人开发的一个小阶段的完成

    • 仓库区中记录的各版本是可以查看并回退的
    • 但是在暂存区的版本一旦提交就再也没有了

三、Git单人本地仓库操作

  • ps:本地仓库是个.git隐藏文件

1. 安装git

git官网:https://git-scm.com/

 Linux中安装操作,window中请下载安装包直接安装
 sudo apt-get install git
  密码:Linux密码

2. 查看git安装结果

git -v

3. 创建项目

首页创建对应存放文件夹,表示是工作项目

  通过 cd d/work/test/
  进入到对应目录下

4. 创建本地仓库

  1. 进入到test,并创建本地仓库.git
  2. 新创建的本地仓库.git是个空仓库
git init
  1. 创建本地仓库.git

    进入该待显示的文件路径,则显示隐藏文件.git

5. 配置个人信息

这里是全局配置个人信息

  git config --global user.name "zhangsan"
  git config --global user.email "zhangsan@163.com"
  • 只在本地单个仓库进行配置个人信息,可以去掉--global进行配置。

  • 默认不配置的话,会使用全局配置里面的用户名和邮箱

本地:
在这里插入图片描述

全局git配置文件路径:~/.gitconfig

在这里插入图片描述

6. 新建py文件

  • 在项目文件test里面创建testa.py文件,用于版本控制演示
    在这里插入图片描述

7. 查看文件状态

  • 红色表示新建文件或者新修改的文件,都在工作区.
  • 绿色表示文件在暂存区
  • 新建的testa.py文件在工作区,需要添加到暂存区并提交到仓库区
git status

在这里插入图片描述

8.将工作区文件添加到暂存区

  # 添加项目中所有文件
  git add .
  或者
  # 添加指定文件
  git add login.py

在这里插入图片描述

9. 将暂存区文件提交到仓库区

  • commit会生成一条版本记录
  • -m后面是版本描述信息
    git commit -m '版本描述'
    
    在这里插入图片描述

10. 接下来就可以在testa.py文件中编辑代码

  • 代码编辑完成后即可进行addcommit操作
  • 提示:添加和提交合并命令
  git commit -am "版本描述"
  • 提交两次代码,会有两个版本记录
  • 在这里插入图片描述
  • 分两次提交在这里插入图片描述

    11.查看历史版本

  git log
  或者
  git reflog

在这里插入图片描述

  • git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录
  • git log 则不能察看已经删除了的commit记录

12. 回退版本

方案一:使用HEAD进行回退

  • HEAD表示当前最新版本
  • HEAD^表示当前最新版本的前一个版本
  • HEAD^^表示当前最新版本的前两个版本,以此类推...
  • HEAD~1表示当前最新版本的前一个版本
  • HEAD~10表示当前最新版本的前10个版本,以此类推...
git reset --hard HEAD^

方案二:当版本非常多时可选择的方案

  • 通过每个版本的版本号回退到指定版本
  git reset --hard 版本号

在这里插入图片描述

回退完成后,testa.py的内容:
在这里插入图片描述

13. 撤销修改

  • 只能撤销工作区暂存区的代码,不能撤销仓库区的代码
  • 撤销仓库区的代码就相当于回退版本操作
    • 撤销工作区代码
      • 新加代码print("hello world 3"),不add到暂存区,保留在工作区
      • git checkout 文件名
- 撤销暂存区代码

    - 新加代码`print("hello world 3")`,并`add`到暂存区
# 第一步:将暂存区代码撤销到工作区
git reset HEAD  文件名
# 第二步:撤销工作区代码
git checkout 文件名

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关文章
|
4月前
|
开发工具 Android开发 开发者
移动应用开发之旅:从概念到市场的全景解析
在数字化浪潮的推动下,移动应用成为了我们日常生活的一部分。本文将带你穿越移动应用开发的迷宫,探索那些让应用从一个简单的想法变成数百万用户手中宝贝的秘密。我们将一探究竟,了解移动操作系统的基础、开发工具的选择、设计原则的应用,以及市场策略的实施。无论你是开发者还是对移动应用充满好奇的旁观者,这篇文章都将为你揭示移动应用背后的魔法。
50 0
|
2月前
|
机器学习/深度学习 自然语言处理 JavaScript
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
在信息论、机器学习和统计学领域中,KL散度(Kullback-Leibler散度)是量化概率分布差异的关键概念。本文深入探讨了KL散度及其相关概念,包括Jensen-Shannon散度和Renyi散度。KL散度用于衡量两个概率分布之间的差异,而Jensen-Shannon散度则提供了一种对称的度量方式。Renyi散度通过可调参数α,提供了更灵活的散度度量。这些概念不仅在理论研究中至关重要,在实际应用中也广泛用于数据压缩、变分自编码器、强化学习等领域。通过分析电子商务中的数据漂移实例,展示了这些散度指标在捕捉数据分布变化方面的独特优势,为企业提供了数据驱动的决策支持。
83 2
信息论、机器学习的核心概念:熵、KL散度、JS散度和Renyi散度的深度解析及应用
|
28天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
40 1
|
1月前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
61 2
|
3月前
|
存储 Linux 开发工具
掌握版本控制的艺术:Git 技巧深度解析
在软件开发中,版本控制对于代码管理和团队协作至关重要。Git 作为最流行的分布式版本控制系统,凭借其强大的功能和灵活性成为开发者必备工具。本文深入探讨 Git 的高级技巧和最佳实践,包括交互式暂存、撤销提交、合并冲突处理等,帮助你更高效地使用 Git。通过遵循清晰的提交信息、保持提交原子性、利用分支开发等最佳实践,开发者可以更好地管理代码库,提升协作效率。
|
2月前
|
存储 NoSQL MongoDB
MongoDB 概念解析
10月更文挑战第12天
24 0
MongoDB 概念解析
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
Transformer图解以及相关的概念解析
前言 transformer是目前NLP甚至是整个深度学习领域不能不提到的框架,同时大部分LLM也是使用其进行训练生成模型,所以transformer几乎是目前每一个机器人开发者或者人工智能开发者不能越过的一个框架。接下来本文将从顶层往下去一步步掀开transformer的面纱。 transformer概述 Transformer模型来自论文Attention Is All You Need。 在论文中最初是为了提高机器翻译的效率,它使用了Self-Attention机制和Position Encoding去替代RNN。后来大家发现Self-Attention的效果很好,并且在其它的地
|
2月前
|
JSON 关系型数据库 API
ElasticSearch 的概念解析与使用方式(二)
ElasticSearch 的概念解析与使用方式(二)
25 1
|
2月前
|
存储 搜索推荐 Java
ElasticSearch 的概念解析与使用方式(一)
ElasticSearch 的概念解析与使用方式(一)
64 1
|
3月前
|
网络协议 安全 Linux
网卡接口跃点数:概念与重要性解析
在计算机网络中,跃点数(Hop Count)是指数据包从源设备传输到目标设备时经过的路由器或网关数量,是衡量路径长度的关键指标。本文详细介绍了跃点数的概念、计算方法及其在网络管理中的重要性,包括性能评估、故障排除、网络优化及路由选择等方面的应用。通过使用traceroute或tracert命令,网络管理员可以轻松获取跃点数信息,并据此优化网络结构,提高数据传输效率和安全性。尽管跃点数是重要指标,但仍需与其他因素结合分析以全面评估网络性能。