git的安装、使用

文章目录

    • 安装git
    • git学习网站
    • git初始配置
      • 具体配置信息
    • 新建版本库(仓库)
    • git的工作区域和文件状态
      • 工作区域
      • 文件状态
        • git文件提交的基础指令
    • git基础指令
      • 1. 版本提交
      • 2. 分支创建
      • 3. 分支切换
      • 4. 分支合并
        • (1) git merge
        • (2) git rebase
      • 5. 在git的提交树上移动
        • (1) HEAD
        • (2) 分离的HEAD
        • (3) 相对引用
        • (4) 强制修改分支位置
        • (5) 撤销变更
      • 6. 整理提交记录
      • 7. 交互式rebase
      • 8. 设定里程碑
      • 9. 添加标签
    • 绑定远程仓库
    • 克隆远程仓库
    • 同步远程仓库
    • 使用远程仓库覆盖本地仓库

安装git

Windows:Git安装
Linux(Ubuntu):

sudo apt install git

git学习网站

Git教程

git初始配置

git config --global user.name "Jasper Yang"

保存用户名和密码,就不用每次重复输入:

git config --global credential.helper store

查看git的配置信息:

git config --global --list

具体配置信息

  • 省略(Local):本地配置,只对本地仓库有效
  • –global:全局配置,对所有仓库有效
  • –system:系统配置,对所有用户生效

usr.name就是说配置的是用户名。
当需要配置邮箱则改一点就行:

git config --global user.email geekhall.cn@gmail.com

后面的就是邮箱地址。

新建版本库(仓库)

  • 创建仓库
    git init
    
    上面的方法是本地创建仓库,我们也能使用git clone来克隆一个本就存在的仓库。

git的工作区域和文件状态

工作区域

  1. 工作区(.git所在的目录):也就是电脑上的本地文件
  2. 暂存区(.it/index):用于保存即将提交到Git仓库的修改内容
  3. 本地仓库(.git/objects):通过git init创建的仓库

文件状态

  • 未跟踪(untrack)
  • 未修改(Unmodified)
  • 已修改(Modified)
  • 已暂存(Staged)
    在这里插入图片描述

上图中展示了各种指令的作用,因为这里也就不再赘述了。

git文件提交的基础指令
git status        # 查看仓库的状态
git add           # 添加到暂存区
git rm --cached   # 将已经添加到暂存区的文件取出
git commit (-m)  # 提交
                  # -m用于指定文件的备注信息等
                  # 这个信息会被提交
git log           # 查看提交的日志信息
git reset         # 用于回退版本

git基础指令

1. 版本提交

git commit

该命令用于在当前所处的分支上提交新版本。
但是git不会盲目得将所有的内容全部重新提交,它会与上一个版本进行比较,如果有更新,就会在其基础上进行更新。

2. 分支创建

git branch <name>

该命令用于创建一个分支,该分支的根节点是创建分支时所处的根节点。

3. 分支切换

git checkout <name>

先前我们已经使用了git branch对分支进行了创建,现在我们就可以使用git checkout进行分支切换了,因为git commit等操作是对当前分支进行操作。

4. 分支合并

(1) git merge
git merge

这里用图来理解下:
在这里插入图片描述
现在有两个分支,main和bugFix,现在我们根据“星号”的位置,可知现在我们处于main分支上。
此时我们使用git merge bugFix
在这里插入图片描述

(2) git rebase
git rebase

git rebase其实就是取出一系列的提交记录,“复制”它们,然后在另一个地方逐个放下去。

在这里插入图片描述
现在我们处于bugFix分支上,bugFix分支是基于C1的修改,main所处的C2分支也是基于C1的修改,现在使用git rebase main对分支进行合并:
在这里插入图片描述

需要注意的是:C3节点并没有消失
坦白点说:当你在bugFix分支上运行git rebase main命令时,实际上是将bugFix分支上的提交记录复制并重新应用到main分支上。这意味着Git会先找到bugFix分支与main分支的最近共同祖先,然后将bugFix分支自该祖先以来的提交记录依次复制并在main分支上重新应用。这样可以使得bugFix分支的提交历史与main分支保持在一条直线上,同时整合bugFix分支的改动到main分支上
所以我理解这个语句为:将根节点重新设定为main所指向的节点

5. 在git的提交树上移动

(1) HEAD

HEAD是当先所在分支的符号引用——也就是指向你正在其基础上进行工作的提交记录。
HEAD总是指向当前分支上的最后一次提交记录
HEAD在通常情况下是指向分支名的。

(2) 分离的HEAD

分离的HEAD指向了某个具体的提交记录而不是分支名
在教程中使用的checkout进行切换,切换的目标是对应节点的哈希值
节点的哈希值,我们能够使用git log进行查看:

git log
(3) 相对引用

git中,我们能通过相对引用,从一个易于记忆的节点或者HEAD进行计算:

  • ^:向上移动一个提交记录
  • ~<num>:向上移动num个提交记录,例如:~3

这里给出两个示例:

HEAD^^
main~3
(4) 强制修改分支位置
git branch -f main HEAD~3

上面的命令会将main分支强制指向HEAD的第3级parent提交。

(5) 撤销变更

Git中撤销变更的方式很多,主要的命令有两个:git resetgit revert,这两个是有区别的。
reset在本地好用,就是版本回退,但是如果是在分布式协作的时候就需要使用revert了,它不是直接回退,而是将更新一个版本,这个版本与需要回退的版本一样。

git reset
git revert

需要配合参数使用,表示需要回退多少个版本:

git reset HEAD~1

6. 整理提交记录

git cherry-pick

该指令用于将节点复制到目前分支上。
这跟之前的rebase有点类似。
cherry-pick适用于知道节点hash值的情况

7. 交互式rebase

交互式rebase其实就是rebase使用参数"-interactive",缩写为"-i",其余与之前rebase的一样。

git rebase -i main~4

它会将main~4的一系列指令进行一个复制操作,然后它会弹出一个UI对话框,其中可以选择拖拽更换节点位置,或者使用pick对节点进行一个“删除”,这样它不会对该节点进行复制。

8. 设定里程碑

里程碑固定指向某个节点,因此也叫做里程碑。

git tag version1 C1

这会将节点C1命名为version1,那么现在version1就表示C1。

9. 添加标签

这个标签就是对该节点的描述

git describe <ref>

其中ref可以是任意可以表示该节点的方法,不管是tag、hash值和HEAD都行。
使用后会有一个输出,格式如下:

<tag>_<numCommits>_g<hash>
  • tag:离ref最近的标签
  • numCommits:ref和tag相距多少个commit
  • hash:给定的ref的hash值,若是ref有标签,则输出标签

绑定远程仓库

我们可以使用clone指令和remote指令绑定远程仓库,例如在Github和Gitee创建的。

git clone <url>

git remote <url>

这两个指令相对来说比较复杂,建议看看官方的git教程。

克隆远程仓库

我们常常把代码托管在远程仓库,当我们想要拉取自己或者别人的远程仓库的时候,我们通常会使用clone指令

git clone <url>

这样就能将仓库中的所有文件全部完整的拉取下来,包括原本的分支情况和标签等等信息。
==这些信息都会存储在该文件夹的**.git**中。

同步远程仓库

当本地仓库的内容发生了修改,我们想要将修改后的内容推送到远程仓库中,这时候,我们就需要将我们已经修改好的内容进行一个推送(push),因为是将本地已经修改好的内容推送,理所应当的是这个被修改了的文件在本地应该处于commit状态,然后我们就能使用git push进行同步了。

git push [-option]

使用远程仓库覆盖本地仓库

首先此时我们先要确定本地仓库已经和远程仓库连接了:

git remote -x

使用这个指令可以看到远程仓库源。
然后将远程仓库的内容拉取到本地:

git fetch origin

但是,这样拉取到本地的内容不会自动合并,于是我们需要合并代码:

  1. 首先切换到想要进行覆盖的远程分支:
    git checkout <remote-branch-name>
    
    这样,工作区就被切换到需要进行覆盖的远程分支了。
  2. 对本地仓库进行重设:
    git reset --hard origin/<remote-branch-name>
    
  3. 然后将本地进行覆盖后的内容推送到远程仓库:
    git push origin <remote-branch-name> --force
    
    这段代码会会强制推送本地仓库内容到远程仓库,覆盖远程分支

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国内哪个工具可以平替chatgpt?国内有哪些比较好用的大模型gpt?

我自己试用了很多的平台&#xff0c;发现三个比较好的大模型平台&#xff0c;对普通用户也比较的友好的&#xff0c;而且返回内容相对来说&#xff0c;正确率更高的&#xff0c;并且相关场景插件比较丰富的国内厂商。 本文说的&#xff0c;是我自己觉得的&#xff0c;比较有主观…

vue2结合electron开发桌面端应用

一、Electron是什么&#xff1f; Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 。允许您保持一个 JavaScript 代码代码库并创建可在Windows、macOS和Linux上运行的跨平台应用 。 Electron 经常与 Ch…

Python3零基础教程之数学运算专题初阶

大家好,我是千与编程,在上一节课程我们讲解了Python3基础课程中的变量与数据专题项目,本章节中涉及的Python3编程语言中的基础的四则运算、赋值运算符号,赋值运算符号,比较运算符号,位运算符号的计算方法。 这一章的内容算是比较基础的部分,最后需要学会使用即可。以下是…

Elasticsearch搜索引擎

目录 初识elasticsearch 了解ES 什么是elasticsearch elasticsearch的发展 搜索引擎技术排名&#xff1a; 总结 倒排索引 正向索引和倒排索引 正向索引 倒排索引 总结 es的一些概念 文档 索引 概念对比 架构 总结 安装es&#xff0c;kibana 安装es 安装kiba…

在网页上踢球:打造我自己的python(Django)足球网站

足球不仅仅是球场上的90分钟。它是一个不断发展的故事&#xff0c;一个全球球迷社群的粘合剂&#xff0c;一个数据和热情交织的世界。作为一名开发者和球迷&#xff0c;我决定将这两大爱好结合起来&#xff0c;用 Django 打造一个足球网站&#xff0c;让球迷们能够追踪他们最爱…

守护无价数据:文件备份的重要性与实用策略

一、数据安全&#xff1a;为何文件备份至关重要 在数字化时代&#xff0c;我们的生活和工作越来越离不开电子设备与其中的文件数据。这些文件可能包含重要的工作文档、珍贵的家庭照片、个人的创意作品等&#xff0c;它们是我们回忆的载体&#xff0c;也是我们工作和创新的基石…

xss.haozi.me靶机练习

目录 第零关&#xff1a; 第一关&#xff1a; 第二关&#xff1a; 第三关&#xff1a; 第四关&#xff1a; 第五关&#xff1a; 第六关&#xff1a; 第七关&#xff1a; 第八关&#xff1a; 第九关&#xff1a; 第十关&#xff1a; 第十一关&#xff1a; 第十二关…

百度SEO快排原理是什么?如何快速排名方法?

前言&#xff1a;我之前说过我不打算写这个快速排序。 首先&#xff0c;我从来没有在自己的网站上操作过所谓的快速排序。 其次&#xff0c;我不能像网上很多人写的那样透露百度快速排序的秘密&#xff08;说实话&#xff0c;你可以透露秘密&#xff09;。 方法是有了&#xff…

unity 数学 如何计算线和平面的交点

已知一个平面上的一点P0和法向量n&#xff0c;一条直线上的点L0和方向L,求该直线与该平面的交点P 如下图 首先我们要知道向量归一化点乘之后得到就是两个向量的夹角的余弦值&#xff0c;如果两个向量相互垂直则值是0&#xff0c;小于0则两个向量的夹角大于90度&#xff0c;大于…

Python3零基础教程之条件控制语句

大家好,我是千与编程,今天我们讲解Python3零基础教程中的If-else条件控制语句,这是Python3语言编程中非常重要的部分,是程序代码有逻辑性和决策性的根本。 尤其针对刷算法题的几乎每一道题都会使用,以下是本次教程内容的思维导图: 一、基本的条件控制语句 在Python 3中…

Jenkins的安装和helloworld Pipeline

文章目录 环境安装下载安装启动初始化 PipelineUISCM&#xff08;Source Control Management&#xff09;准备pipeline 参考 环境 RHEL 9.3Jenkins 2.44.0.1 安装 参考 https://www.jenkins.io/doc/book/installing/linux/#red-hat-centos 。 下载安装 [ding192 ~]$ sudo …

2024新算法:鹅算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

本期采用鹅算法优化一下VMD参数。利用MATLAB官方自带的VMD函数。 替换为官方自带的VMD函数后&#xff0c;寻优速度真的大幅度提升&#xff01;数据量大的不妨都试试这个官方的VMD函数。当然要下载2020a以上的MATLAB才可以哦&#xff01; 同样以西储大学数据集为例&#xff0c;选…

vue 部署后修改配置文件(接口IP)

近期&#xff0c;有一个项目&#xff0c;运维在部署的时候&#xff0c;接口ip还没有确定&#xff0c;而且ip后面的路径一直有变动&#xff0c;导致我这里一天打包至少四五次才行&#xff0c;很麻烦&#xff0c;然后看了下有没有打包后修改配置文件修改接口ip的方法&#xff0c;…

【QT+QGIS跨平台编译】之六十四:【QGIS_CORE跨平台编译】—【错误处理:未定义类型QTemporaryDir - QgsSourceCache】

文章目录 一、未定义类型QTemporaryDir二、解决办法 一、未定义类型QTemporaryDir 报错&#xff1a; 二、解决办法 QgsSourceCache.h文件中 第25行修改为&#xff1a; #include <QTemporaryDir>

深入了解Kafka的文件存储原理

Kafka简介 Kafka最初由Linkedin公司开发的分布式、分区的、多副本的、多订阅者的消息系统。它提供了类似于JMS的特性&#xff0c;但是在设计实现上完全不同&#xff0c;此外它并不是JMS规范的实现。kafka对消息保存是根据Topic进行归类&#xff0c;发送消息者称为Producer&…

FreeRTOS学习笔记——FreeRTOS中断管理

什么是中断&#xff1f; 简介&#xff1a;让CPU打断正常运行的程序&#xff0c;转而去处理紧急的事件&#xff08;程序&#xff09;&#xff0c;就叫中断 例&#xff1a; 中断执行机制&#xff0c;可简单概括为三步&#xff1a; 中断优先级分组设置 ARM Cortex-M 使用了 8 位…

微信小程序触屏事件_上划下划事件

一、微信小程序触屏事件 bindtouchstart&#xff1a;手指触摸动作开始 bindtouchmove&#xff1a;手指触摸后移动 bindend&#xff1a;手指触摸动作结束 属性类型说明touchesArray触摸事件&#xff0c;当前停留在屏幕中的触摸点信息的数组 Touch 对象 属性类型说明identi…

基于MVS的三维重建算法学习笔记(一)— MVS三维重建概述与OpenMVS开源框架配置

基于MVS的三维重建算法学习笔记&#xff08;一&#xff09;— MVS三维重建概述与OpenMVS开源框架配置 声明1. MVS&#xff08;Multi-view stereo&#xff09;概述稀疏重建与稠密重建的区别稀疏重建——SFM&#xff08;Structure from Motion&#xff09;算法稠密重建——MVS&am…

家政行业的数字转型:开发智能化家政预约APP的挑战与机遇

为了适应这一变化&#xff0c;许多家政企业开始积极探索数字化转型&#xff0c;其中包括开发智能化预约APP。本文将探讨开发智能化预约APP所面临的挑战与机遇。 ​一、挑战&#xff1a; 1.用户体验设计&#xff1a; -开发智能化预约APP需要注重用户体验设计&#xff0c;包括…

Android使用OpenGL和FreeType绘制文字

Open GL主要是渲染图形的&#xff0c;有时候需要绘制文字&#xff0c;网上搜了一下&#xff0c;基本思路都是把文字转成位图&#xff0c;再使用Open GL纹理进行渲染。加载纹理在特定阶段才能成功&#xff08;在onSurfaceCreated中加载&#xff09;&#xff0c;这样就无法动态的…