[Git][基本操作]详细讲解

news2024/9/21 17:51:15

目录

  • 1.创建本地仓库
  • 2.配置 Git
  • 3.添加文件
    • 1.添加文件
    • 2.提交文件
    • 3.其他 && 说明
  • 4.删除文件
  • 5.跟踪修改文件
  • 6.版本回退
  • 7.撤销修改
    • 0.前言
    • 1.未add
    • 2.已add,未commit
    • 3.已add,已commit


1.创建本地仓库

  • 创建⼀个Git本地仓库git init
  • 运行该命令后,会在当前目录下多出一个.git的隐藏目录
  • .git目录是Git用来跟踪管理仓库的,不要手动修改这个目录里面的文件
    • 如果改乱了,该Git仓库就被破坏了

2.配置 Git

  • 安装Git后⾸先要做的事情是设置⽤⼾名称和Email地址
    • git config [--global] user.name "Your Name"
    • git config [--global] user.email "email@example.com"
    • --global是一个可选项,表⽰这台机器上所有的Git仓库都会使⽤这个配置
  • 查看配置git config -l
  • 删除对应的配置
    • git config [--global] --unset user.name
    • git config [--global] --unset user.email

3.添加文件

1.添加文件

  • 添加⼀个或多个⽂件到暂存区git add [file1] [file2] ...
  • 添加某个目录下的所有⽂件改动到暂存区git add [dir]
  • 添加当前⽬录下的所有⽂件改动到暂存区git add .

2.提交文件

  • 提交暂存区全部内容到本地仓库中git commit -m "message"
  • 提交暂存区的指定⽂件到仓库区git commit [file1] [file2] ... -m "message"
  • 注意git commit后⾯的-m选项,要跟上描述本次提交的message且不能省略
    • 该描述用来记录提交细节,是给人看的,所以要好好描述

3.其他 && 说明

  • 查看历史提交记录git log
    • 如果觉得信息太多,可以加上--pretty=oneline参数
  • 类似7a535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3,是每次提交的commit id(版本号)
    • 不是单纯的数字,而是由SHA1计算出来的十六进制数

4.删除文件

  • 方法一
    • 先在工作区中删除该文件rm file
    • 添加工作区中该文件的修改git add file
    • 提交修改git commit
  • 方法二
    • 直接删除并添加修改git rm file
      • 相当于将rm filegit add file合并为了一步
    • 提交修改git commit

5.跟踪修改文件

  • Git跟踪并管理的是修改,⽽⾮⽂件
  • 查看当前仓库的状态git status
    $ git status
    On branch master
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
            modified:   233.txt
    
    no changes added to commit (use "git add" and/or "git commit -a")
    
  • 显⽰暂存区和⼯作区⽂件的差异git diff [file]
    $ git diff
    diff --git a/233.txt b/233.txt
    index 99a6aad..80c8ca9 100644
    --- a/233.txt
    +++ b/233.txt
    @@ -1 +1,2 @@
     SnowK
    +DieSnowK
    
  • 查看版本库和⼯作区⽂件的区别git diff HEAD -- [file]

6.版本回退

  • 版本回退git reset本质是将版本库中的内容进⾏回退,⼯作区或暂存区是否回退由命令参数决定
  • 语法格式git reset [--soft | --mixed | --hard] [HEAD]
    • --mixed:将暂存区和版本库的内容回退到指定版本,工作区的内容不变
      • 默认选项,使用时可以不带此参数
    • --soft:将版本库的内容回退到指定版本,工作区和暂存区的内容不变
    • --hard:将工作区、暂存区、版本库的内容都回退到指定版本
      • 慎用,特别是当前工作区还有未提交的代码时
      • 因为工作区回滚,未提交的代码就再也找不回来了
  • [HEAD]说明:可直接写成commit id/SHA1,表⽰指定退回的版本
    • 也可以写成如下形式
      • HEAD表⽰当前版本
      • HEAD^上⼀个版本
      • HEAD^^上上⼀个版本
      • 以此类推…
    • 还可以使用~数字表示
      • HEAD~0表⽰当前版本
      • HEAD~1上⼀个版本
      • HEAD~2上上⼀个版本
  • 如果回退到一个版本后悔了,想再倒回去,该怎么办?
    • 可以继续使用git reset命令,直接使用之前拿到的git log中的commit id即可
  • 如果连git log中的commit id也找不到了,该怎么办?
    • 使用git reflog补救,该命令用来记录本地的每一次命令
    • git reflog拿到的是一个很简短的哈希值,但是凭借哈希值,也可以回退到特定版本
      • 该简短的哈希值是commit id的部分
      • :可以使用部分commit id来表示目标版本
    $ git reflog
    1320449 (HEAD -> master) HEAD@{0}: reset: moving to 13204498006394d6067fbc8b6046885c6e5e9649
    7a535a4 HEAD@{1}: reset: moving to HEAD^^
    1320449 (HEAD -> master) HEAD@{2}: commit: 233.txt add DieSnowK
    d74fd33 HEAD@{3}: commit: 666.txt
    7a535a4 HEAD@{4}: commit (initial): First Commit
    
    $ git reset --hard 7a535a4
    HEAD is now at 7a535a4 First Commit
    
    $ git log
    commit 7a535a4f3e6dba8a8dbcea9d7e3ee3c395aeabf3 (HEAD -> master)
    Author: DieSnowK <1752351098@qq.com>
    Date:   Tue Jul 23 14:30:39 2024 +0800
    
    	First Commit
    
  • 但是如果由于长时间开发,导致commit id早就找不到了,此时再想回退倒该版本,貌似就不可能了:P
  • 说明:Git的版本回退速度⾮常快的原因
    • Git在内部有个指向当前分⽀(此处是master)的HEAD指针

      • refs/heads/master⽂件⾥保存当前master分⽀的最新commit id
    • 在回退版本的时候,Git仅仅是给refs/heads/master中存储了一个特定的commit id

      请添加图片描述


7.撤销修改

0.前言

  • 撤销修改一般会遇到三种情况
    • ⼯作区的代码,还没有add:只有工作区有当前代码
    • 已经add,但还未commit:只有工作区和暂存区有当前代码
    • 已经add,并且commit:工作区、暂存区、版本库都有当前代码
  • 首先要明确:撤销的目的,其实是为了不影响远端仓库的代码

1.未add

  • 手动撤销:大眼瞪小眼,一个个盯着对比,然后删除
    • 非常容易出错,及其不推荐
  • 让工作区回到该版本的最初状态git checkout -- [filename]
    • 注意--不能丢,丢了就是其他含义了

2.已add,未commit

  • 此时可以先git reset --mixed [HEAD],将暂存区的内容回退到指定的版本
    • 此处,可以将暂存区回退到该版本最初始的状态
  • 然后就与情况一相同了,相当于是未add的情况
    • 此时执行git checkout -- [filename]即可

3.已add,已commit

  • 前置条件commit后没有push到远端仓库
  • 直接回退到上一个版本即可git reset --hard HEAD^

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

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

相关文章

模型 ESBI(财富四象限)

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。财富自由之路的4个阶段。 1 ESBI模型的应用 1.1 一名工程师的财富自由之路 有一个名叫张伟的软件工程师&#xff0c;他在一家大型科技公司工作&#xff08;E象限&#xff09;。随着时间的推移&#…

模型量化技术综述:揭示大型语言模型压缩的前沿技术

大型语言模型&#xff08;LLMs&#xff09;通常因为体积过大而无法在消费级硬件上运行。这些模型可能包含数十亿个参数&#xff0c;通常需要配备大量显存的GPU来加速推理过程。 因此越来越多的研究致力于通过改进训练、使用适配器等方法来缩小这些模型的体积。在这一领域中&am…

electron-updater实现electron全量更新和增量更新——渲染进程交互部分

同学们可以私信我加入学习群&#xff01; 正文开始 前言更新功能所有文章汇总一、监听页面渲染完毕1.1 myApi.handleCheckPcUpdate检查更新1.2myApi.onPcUpdateProgress接收下载信息1.3myApi.onPcDownloaded监听下载完毕事件 二、立即更新三、跳过更新四、打开更新模块总结 前言…

打卡第32天------动态规划

坚持了一个月了,骑马找马,要坚持不懈呀✊ 一、动态规划理论基础 1、什么是动态规划?英文:Dynamic Programming,简称DP。 如果某一问题有很多重叠子问题,使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的,这一点就区分于贪心,贪心没有…

JVM—虚拟机类加载时机与过程

参考资料&#xff1a;深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践&#xff08;第3版&#xff09;周志明 1. 类加载的时机 一个类型从被加载到虚拟机内存开始&#xff0c;到卸载出内存为止&#xff0c;它的生命周期会经历加载、验证、准备、解析、初始化、使用、卸载…

netapp内网穿透

1. 注册netapp账号 NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 2. 购买隧道&#xff0c;要求不高的话可以使用这个免费的 3.设置隧道 主要设置你想通过公网访问你的本地端口号 4.点击我的隧道&#xff0c;注意这里的authtoken&#xff0c;后面会用到 5.本地下载netap…

[E二叉树] lc572. 另一棵树的子树(dfs+前中序判断+树哈希+树上KMP+好题)

文章目录 1. 题目来源2. 题目解析 1. 题目来源 链接&#xff1a;572. 另一棵树的子树 2. 题目解析 看到这个题目就感觉不简单&#xff0c;因为写了写 dfs 版本的&#xff0c;发现好像不太会… 还是简单粗暴一点&#xff0c;直接搞一个 前序中序&#xff0c;进行判断即可。我…

应急响应-Web3

打开虚拟机之后&#xff0c;运行解题系统&#xff1a; 共有三个问题&#xff01; 攻击者的两个IP地址 首先我们看到机器的桌面上还是存在phpstudy&#xff0c;那就还是先去看看是不是从web层面进行的攻击&#xff0c;上传webshell从而getshell。 利用D盾尝试对phpstudy目录进…

Python | Leetcode Python题解之第319题灯泡开关

题目&#xff1a; 题解&#xff1a; class Solution:def bulbSwitch(self, n: int) -> int:return int(sqrt(n 0.5))

redis面试(四)持久化

什么是持久化&#xff1f; 由于redis是基于内存操作的轻量型数据库&#xff0c;所以如果发生宕机重启这种事情&#xff0c;存储的数据就会直接丢失&#xff0c;如果在里面存储了没有备份的数据&#xff0c;那么确实会对我们的业务造成一定影响。 所以我们要通过持久化的手段&a…

Java中interrupted()与isInterrupted()的区别

Java中interrupted&#xff08;&#xff09;与isInterrupted&#xff08;&#xff09;的区别 1、interrupted()方法1.1 示例 2、isInterrupted() 方法2.1 示例 3、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在Java多线程编程中&a…

手持式气象站:科技赋能精准气象观测

在自然界与人类社会的交织中&#xff0c;气象条件始终扮演着至关重要的角色。无论是农业生产、城市建设&#xff0c;还是日常生活、户外活动&#xff0c;都离不开对天气变化的准确预测和及时响应。随着科技的飞速发展&#xff0c;气象观测设备也迎来了变化&#xff0c;其中&…

什么是人工智能 (AI)

1955年9月&#xff0c;达特茅斯学院&#xff08;Dartmouth College&#xff09;年轻的数学助理教授约翰麦卡锡&#xff08;John McCarthy&#xff09;大胆提出&#xff0c;“原则上&#xff0c;学习的各个方面或智力的任何其他特征都可以被精确地描述&#xff0c;以至于可以制造…

使用Python3脚本检查节假日并通过企业微信发送每日信息

文章目录 简介环境配置企业微信机器人创建群聊设置机器人信息 脚本详解导入必要的库获取节假日信息判断是否为工作日或节假日获取天气预报获取每日一句发送消息到微信主函数 加入定时任务总结完整代码 简介 在日常工作和生活中&#xff0c;自动化任务可以帮助我们节省大量时间…

吃惊!这个Windows双系统方法逆天了|UEFI篇

前言 最近小白在折腾别的系统教程&#xff0c;偶然间发现居然有一个很nice的Windows双系统教程。于是于是&#xff0c;果断尝试了一下&#xff0c;发现真的很可行&#xff01; 这个双系统的办法并不需要使用到WinPE系统&#xff0c;因此并不需要使用到U盘&#xff0c;只需要在…

科普文:微服务之SpringBoot性能优化器动态线程池【Dynamic-Tp】特性和源码解读

一、简述 gitee地址&#xff1a;https://gitee.com/yanhom/dynamic-tp github地址&#xff1a;https://github.com/lyh200/dynamic-tp dynamic-tp是一个轻量级的动态线程池插件&#xff0c;它是一个基于配置中心的动态线程池&#xff0c;线程池的参数可以通过配置中心配置进…

数的三次方根

题目 给定一个浮点数 n&#xff0c;求它的三次方根。 输入格式 共一行&#xff0c;包含一个浮点数 n。 输出格式 共一行&#xff0c;包含一个浮点数&#xff0c;表示问题的解。 注意&#xff0c;结果保留 6 位小数。 数据范围 输入样例&#xff1a; 1000.00 输出样例&a…

征服数据结构中的时间和空间复杂度

目录 时间复杂度推导大O方法求解时间复杂度的方法普通顺序结构单循环双循环递归Master定理&#xff08;主定理&#xff09;递归树方法 空间复杂度 一个算法的好坏根据什么来判断呢&#xff1f;有两种一种是时间效率&#xff0c;一种是空间效率。时间效率也可称为时间复杂度&…

内网穿透--LCX+portmap转发实验

实验背景 通过公司带有防火墙功能的路由器接入互联网&#xff0c;然后由于私网IP的缘故&#xff0c;公网 无法直接访问内部web服务器主机&#xff0c;通过内网其它主机做代理&#xff0c;穿透访问内网web 服务器主机 实验设备 1. 路由器、交换机各一台 2. 外网 kali 一台&…