Git教程-廖雪峰-个人归纳更新总结

news2024/11/26 1:57:27

文章目录

  • 前言
  • Git简介:
    • Git的诞生:
    • 集中式和分布式
  • 安装Git:
  • 创建版本库
  • 时光穿梭机(*)
    • 版本回退
    • 撤销修改
    • 删除文件
  • 远程仓库:
    • 添加远程仓库:
      • 删除远程库与本地库的链接:
    • 从远程库克隆(*)
  • 使用GitHub

前言

日常需要,但又因为用的少,所以一些命令不太熟,所以根据自己的记忆需求整理成文。整理的资料对象:《廖雪峰的Git教程》,定位:拿手即用,字典查询。

Git简介:

Git:不但能自动帮我记录每次文件的改动,还可以让同事协作编辑,这样就不用自己管理一堆类似的文件了,也不需要把文件传来传去。如果想查看某次改动,只需要在软件里瞄一眼就可以。这样,你就结束了手动管理多个“版本”的史前时代,进入到版本控制的20世纪。

Git的诞生:

Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git!一个月之内,Linux系统的源码已经由Git管理了!牛是怎么定义的呢?大家可以体会一下。

集中式和分布式

先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
在这里插入图片描述
分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同事也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
在这里插入图片描述

安装Git:

  1. Linux、MacOS、Windows通用安装教程
  2. 安装完成后,还需要最后一步设置,在命令行输入:
    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    

    因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。

创建版本库

什么是版本库呢?英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

在空目录下使用命令git init将该目录变成git可管理的仓库。此时当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

$ git init
Initialized empty Git repository in XXX/.git/

使用版本库:
把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。

  1. 用命令git add告诉Git,把文件添加到暂存区:

    $ git add XXX
    

    在这里插入图片描述

  2. 用命令git commit告诉Git,把文件提交到仓库:

    $ git commit -m "wrote a readme file"
    [master (root-commit) eaadf4e] wrote a readme file
     1 file changed, 2 insertions(+)
     create mode 100644 XXX
    

    git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。

    为什么Git添加文件需要addcommit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件。

    在这里插入图片描述

时光穿梭机(*)

常用命令:

  1. git status命令可以让我们时刻掌握仓库当前的状态
  2. git diff XXX查看文件最近修改的内容
  3. git log命令显示从最近到最远的提交日志,加上--pretty=oneline可以简化输出信息。
  4. git diff HEAD -- XXX查看工作区中的XXX文件与最近一次提交的XXX文件的修改

版本回退

HEAD表示当前版本,第前K个版本,就是HEAD~K

  1. 首先使用git log确定回退到哪个版本,假设回到第前K个版本,其对应的commit id的前几位是1094adb...
  2. 使用命令指定回到过去/未来的某个版本:
    $ git reset --hard HEAD~K(or 1094ad)
    

git reflog用来记录你的每一次commitreset

撤销修改

之前提到,把文件放到Git仓库只需两步,所以撤销修改也对应几种情况:

  1. 只在工作区作了修改尚未git add时使用:
    git restore <file>
    
  2. 只有git add尚未git commit时使用:
    git restore --staged <file>
    
    回到情况1,然后使用git restore <file>处理。
  3. 执行了git commit尚未git push
    使用版本回退
    $ git reset --hard HEAD~K(or 1094ad)
    

删除文件

在Git中,删除操作也是一个修改
具体操作流程:

  1. 在工作区删除某个文件:
    rm XXX
    
  2. 分情况:
    1. 确定删除:使用命令将本次操作提交到暂存区并且提交
      git add/rm <file>
      git commit -m "delete XXX"
      
    2. 误删操作:进行恢复操作:
      git restore <file>
      

远程仓库:

Git的杀手级功能之一(注意是之一,也就是后面还有之二,之三……):远程仓库。
找一台电脑充当服务器(GitHub)的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
前置条件:

  1. 注册一个GitHub账号
  2. 由于本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以需要一点设置:
    1. 创建SSH Key:
      $ ssh-keygen -t rsa -C "youremail"
      
    2. 第2步:登陆GitHub --> Settings --> SSH Keys页面,点击New SSH Keys,然后在Key文本框里粘贴/Users/XXX/.ssh/id_rsa.pub文件的内容,从而在GitHub设置中添加自己机器的身份。

      因为GitHub需要识别出你推送的提交确实是你推送的,而不是别人冒充的,而Git支持SSH协议,所以,GitHub只要知道了你的公钥,就可以确认只有你自己才能推送。

添加远程仓库:

  1. 首先,登陆GitHub,然后,在右上角找到“New repository”按钮,创建一个新的仓库:

  2. Repository name中填入仓库名,其他保持默认设置后,点击Create repository后就成功地创建了一个新的Git仓库。

  3. 现在,在本地仓库目录下运行命令:

    $ git remote add origin git@github.com:username/XXX.git
    

    添加后,远程库的名字就是origin,这是Git默认的叫法,也可以改成别的,但是origin这个名字一看就知道是远程库。

  4. 可以把本地库的所有内容推送到远程库上:

    git push -u origin main
    

    由于远程库是空的,我们第一次推送main分支时,加上了-u参数,Git不但会把本地的main分支内容推送的远程新的main分支,还会把本地的main分支和远程的main分支关联起来,在以后的推送或者拉取时就可以简化命令使用$ git push origin main

    删除远程库与本地库的链接:

    1. 建议使用$ git remote -v查看一下远程库的信息
      $ git remote -v
      origin  git@github.com:username/XXX.git (fetch)
      origin  git@github.com:username/XXX.git (push)
      
    2. 根据名字删除,比如删除origin,此处的删除其实是解除本地和远程的绑定关系,并不是物理上删除了远程库。
      $ git remote rm origin
      

从远程库克隆(*)

简单粗暴,使用命令

$ git clone git@github.com:username/XXX.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 3
Receiving objects: 100% (3/3), done.

使用GitHub

如何参与一个开源项目呢?

  1. GitHub上,可以任意Fork开源仓库;
  2. 从自己的账号下clone,因为自己拥有Fork后的仓库的读写权限:
    git clone git@github.com:michaelliao/bootstrap.git
    
  3. 如果你希望bootstrap的官方库能接受你的修改,你就可以在GitHub上发起一个pull request。当然,对方是否接受你pull request就不一定了。
    在这里插入图片描述

其他方面用到再更…

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

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

相关文章

微服务系列文章之 Redisson实现分布式锁

一、高效分布式锁 当我们在设计分布式锁的时候&#xff0c;我们应该考虑分布式锁至少要满足的一些条件&#xff0c;同时考虑如何高效的设计分布式锁&#xff0c;这里我认为以下几点是必须要考虑的。 1、互斥 在分布式高并发的条件下&#xff0c;我们最需要保证&#xff0c;同…

浅谈Python+requests+pytest接口自动化测试框架的搭建

框架的设计思路 首先要明确进行接口自动化需要的步骤&#xff0c;如下图所示&#xff1a; ​然后逐步拆解需要完成的工作&#xff1a; 1&#xff09;了解分析需求&#xff1a;了解接口要实现的功能 2&#xff09;数据准备&#xff1a;根据开发文档确定接口的基本情况&#x…

SuperMap iClient3D for Cesium最短路径分析

作者&#xff1a;Mei 目录 前言实现思路实现步骤1、构建二维网络数据集1.1拓扑检查1.2线拓扑数据集处理1.3构建二维网络数据集 2、发布网络分析服务3、实现代码 前言 在交通、消防业务场景中&#xff0c;如果某地发生火灾或者交通事故&#xff0c;需要快速规划出最短抢救路线&a…

河南元宇宙创造者大赛成果展示空间“元豫宙”斩获TopDigital创新营销奖金奖

6月29日&#xff0c;在上海举行的TopDigital营销盛典上&#xff0c;河南文旅元宇宙空间“元豫宙”&#xff0c;凭借其匠心独具的创新性场景设计、美轮美奂的超写实场景呈现、新潮炫酷的沉浸式虚拟体验&#xff0c;斩获TopDigital创新营销奖虚拟场景设计组金奖。元豫宙&#xff…

2023年31个最适合博主的WordPress主题

自从我最初开始写博客以来&#xff0c;在近十年的经验中&#xff0c;我已经出于各种目的在多个博客中测试和使用了数十种不同的 WordPress 主题。 以下是我挑选的绝对最佳WordPress主题&#xff0c;专门针对不想编写一行代码的博主。 无论您是想创建个人理财博客、撰写时尚、…

项目范围管理中8个常见错误,千万别大意!

管理项目范围就像驾驶汽车&#xff0c;如果不注视前方&#xff0c;汽车就会偏离道路。同样&#xff0c;如果不控制项目范围&#xff0c;项目就会偏离正轨。管理者在尝试管理项目范围时可能会遇到很多问题&#xff0c;下面来了解一下范围管理的常见错误&#xff0c;看看如何通过…

服务器数据库中了360后缀勒索病毒怎么办,如何预防勒索病毒攻击?

随着网络技术的不断发展&#xff0c;企业的计算机服务器也受到了网络安全威胁&#xff0c;近日&#xff0c;很多企业的服务器被360后缀勒索病毒攻击&#xff0c;导致企业的数据库中的许多重要数据被加密&#xff0c;无法正常读取打开。360后缀勒索病毒数据BeijingCrypt勒索病毒…

JVM 中的垃圾回收策略

文章目录 JVM 中的垃圾回收策略死亡对象的判断算法引用计数可达性分析 垃圾回收算法标记-清除算法复制算法标记-整理算法分代算法 JVM 中的垃圾回收策略 C 语言中&#xff0c;malloc 的内存必须 手动 free&#xff0c;否则容易出现内存泄漏&#xff08;光申请内存&#xff0c;…

Prometheus监控Tongweb容器

&#x1f3c5;概述 JMX Exporter主要是利用Java的JMX机制来读取JVM运行时的一些数据&#xff0c;然后转化为Prometheus可读取的metrics格式的数据。 JMX Exporter有两种用法&#xff1a; 启动独立进程。通过RMI读取JVM数据&#xff0c;但是单独进程监控也存在问题。JVM进程内启…

WSL 更新NVIDIA 驱动 安装CUDA

WSL 一定要使用WSL2&#xff0c;我选择的linux系统是ubuntu22.04&#xff0c;在微软应用商店安装的。 安装完成之后可以通过 wsl -l -v查看 NVIDIA 驱动 WSL 中不要直接安装linux版的显卡驱动&#xff0c;而是需要在windows中安装驱动。可以参考这篇文章NVIDIA官网文章 得保…

Spring Cache (基础知识+瑞吉外卖项目)

Spring Cache 基本介绍 Spring Cache是一个框架&#xff0c;实现了基于注解的缓存功能&#xff0c;只需要简单地加一个注解&#xff0c;就能实现缓存功能。 Spring Cache提供了一层抽象&#xff0c;底层可以切换不同的cache实现。具体就是通过CacheManager接口来统一不同的缓…

机器学习实践(2.1)LightGBM分类任务

前言 LightGBM也属于Boosting集成学习模型(还有前面文章的XGBoost)&#xff0c;LightGBM和XGBoost同为机器学习的集大成者。相比越来越流行的深度神经网络&#xff0c;LightGBM和XGBoost能更好的处理表格数据&#xff0c;并具有更强的可解释性&#xff0c;还具有易于调参、输入…

Java 多线程编程在 JMeter 中应用

目录 前言&#xff1a; 首先新建一个简单的线程组和一个简单的请求&#xff1a; 添加 JSR223 预处理程序&#xff08;后置处理程序需要下一次次请求&#xff09; 可以通过复制私有变量来控制所有线程获取公共变量时的线程安全问题。 日志输出&#xff1a; 前言&#xff1a…

Excel VLOOKUP使用详解

VLOOKUP语法格式&#xff1a; VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) VLOOKUP&#xff08;要查找的值&#xff0c;查找区域&#xff0c;要返回的结果在查找区域的第几列&#xff0c;精确匹配或近似匹配&#xff09; 一、精确查找 根据姓名查找对应…

Jmeter之数据参数化方法汇总

一、什么是参数化 Jmeter参数化是指将脚本中的某些需要输入数据使用参数来代替&#xff0c;在脚本运行时指定参数的取值范围和规则。脚本在运行时就可以根据需要选取不同的参数值作为输入。 常用的Jmeter的参数化请求&#xff0c;包括以下几种方式&#xff1a; 用户参数用户…

Seata分布式事务失效场景

场景&#xff1a; Feign熔断降级&#xff1b;被调用服务全局异常捕获了&#xff1b; 解决方案&#xff1a; 将需要分布式事务的调用链异常一直往上抛出去&#xff1b; 参考&#xff1a;https://blog.csdn.net/qq_16468489/article/details/121798016手动开启全局事务并进行回…

观察者(Observer)模式

目录 使用场景参与者协作效果实现类图 观察者(Observer)又被称为 发布-订阅模式&#xff0c;是一种对象行为模式&#xff0c;定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时所有依赖于它的对象都得到通知并自动更新。通知的发布者&#xff08;目标&a…

校园跑腿小程序都包括哪些业务呢?

校园创业&#xff0c;大家都知道&#xff0c;一直以来是个非常火热的话题&#xff0c;每位步入大学校园的学子们都有过在校创业的想法&#xff0c;包括我们一些有着学校资源的社会创业者们&#xff0c;早已经看好了中国高校这块巨大的市场。 在这里&#xff0c;我要跟大家分享…

面向对象进阶二(包、final、权限修饰符、代码块、abstract、接口、内部类)

面向对象进阶二 一、包、final、权限修饰符、代码块1.1 包1.2 final关键字1.3 权限修饰符1.4 代码块1.4.1 局部代码块&#xff08;已淘汰&#xff0c;了解&#xff09;1.4.2 构造代码块&#xff08;了解内容&#xff09;1.4.3 静态代码块 二、抽象方法和抽象类三、接口3.1 接口…

解释 void 类型转换: (void)++y

谢谢大师们的指导&#xff0c;保存&#xff0c;分享