Git学习——细节补充

Git学习——细节补充

    • 1. git diff
    • 2. git log
    • 3. git reset
    • 4. git reflog
    • 5. 提交撤销
      • 5.1 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时
      • 5.2 当提交到了stage区后,想要退回
    • 6. git remote
    • 7. git pull origin master --no-rebase
    • 8. 分支管理
    • 9. git rebase
    • 10. git cherry-pick(选择性提交)
    • 总结

在这里插入图片描述
1

1. git diff

如果忘记了修改了什么,可以使用此命令进行变更详情查看。

# 1. 查看当前目录指定文件与(暂存区)目录该文件之间的区别
git diff hwy.txt	
# 2. 查看当前目录,所有文件变更情况
git diff
# 3. 查看当前目录,与(最新的提交`HEAD`)之间的差异
git diff HEAD -- cxk.txt

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


2. git log

git log		# 详细的查看历史的所有commit版本

在这里插入图片描述


3. git reset

# 回退历史版本
git reset --hard HEAD^		# 回退到上一个commit版本
git reset --hard HEAD~5		# 向前回退5个commit版本
git reset --hard st34f2r	# 变更到指定某一个版本

在这里插入图片描述


4. git reflog

由于后退到某个历史版本后,git log就不会输出该版本之后的提交id,可以通过查看git命令执行日志,找到对应的提交ID,在进行commit版本变更。

git reflog

在这里插入图片描述


5. 提交撤销

5.1 当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时

git checkout -- cxk.txt			# 1. 撤回指定文件工作区中的修改

在这里插入图片描述


5.2 当提交到了stage区后,想要退回

git reset HEAD cxk.txt

在这里插入图片描述

  • 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。
  • 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
  • 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

6. git remote

# 1. 新建与远程仓库的链接
git remote add origin git@github.com:username/project_name.git# 2. 删除与远程仓库的链接
git remote -v			# 查看有哪些远程仓库链接
git remote rm xxxxxx	# rm删除与远程仓库的链接


7. git pull origin master --no-rebase

# 当遇到本地仓库有自己独有的文件,远程仓库有独有的文件,合并两个仓库
# 1. 重新生成一个提交,用于合并本地分支和远程仓库分支
git pull origin master --no-rebase# 2. 采用变基(rebase)策略,将本地分支的所有提交,在远程分支最新提交上”重新播放“,从而达到一个线性的提交历史
git pull origin master --rebase

在这里插入图片描述


8. 分支管理

git checkout -b dev		# 快速创建一个dev分支,并切换到该分支# 等价于如下
git branch dev
git checkout dev		

在这里插入图片描述

# 合并dev到当前所在分支
git merge dev

在这里插入图片描述

  • 需要切换到指定分支,然后再将dev分支合并到指定分支.
  • 创建分支,实际上只是创建了一个指向当前commit的一个指针,上述merge将会采用Fast-forward策略,快速合并;这是因为这种合并只是将master指针指向了dev当前commit所在的版本位置。
  • 随后直接删除dev即可

9. git rebase

当本地分支需要与远程分支同步,但是远程分支已经有了新的版本,因此无法直接git push.

此时,需要先git pull origin master,将远程的分支与本地进行合并,但是这样一来,就会有很多分叉的历史提交线.

为了保证美观,因此可以考虑使用变基(rebase)

这里我演示一下rebase的工作原理

任务:

  • 新建并切换到 bugFix 分支
  • 提交一次
  • 切换回 main 分支再提交一次
  • 再次切换到 bugFix 分支,rebase 到 main 上
# 1. 创建bugFix分支,并切换过去
git checkout -b bugFix

在这里插入图片描述

2. 在bugFix分支提交一次,随后切回到main分支(这里就不打命令了)

在这里插入图片描述

3. 在main分支commit一次(这里就不打命令了)
git checkout bugFix		# 切到bugFix分支

在这里插入图片描述

# 4. 执行rebase合并(变基合并)
git rebase main

在这里插入图片描述

rebase工作原理可以解释为如下:

  • c1->c2的变更操作,应用到main分支的最新提交位置,从而达到合并的效果。
  • 因此,在main分支的最新提交处c3,新增了一个提交操作,从而到达了c2’;c3->c2'的文件变更情况与c1->c2一样

为了更详细的展示,这里举了一个多次commit的例子。

如下图,可以看到:

  • bugFix的提交过程为C1->C2->C3
  • main的提交过程为C1->C4->C5

执行rebase命令后,则会将C1->C2->C3的版本变更操作,执行到main分支的最新提交C5上;

从而得到一个使得历史提交版本线像是在同一条线上进行的,更加美观。
在这里插入图片描述

PS: merge和rebase的用户不同之处

  • rebase:如果需要将A分支合并到B分支,则需要先切换到A分支,然后执行git rebase B,有种基于B,把当前分支提交合并进去的意思;
  • merge:如果需要将A分支合并到B分支,那么直接切到B分支作为骨干,执行git merge A,有种将A拉过来合并的意思。

10. git cherry-pick(选择性提交)

# 顾名思义,筛选,挑拣。
# 意思是指定一些commit,合并到当前所在分支。
git cherry-pick c3 c4 (可接多个提交版本)

举个例子,下图共有4个分支,当前处于main分支,现在想要吧c3,c4,c7三个提交,合并到main分支上。

在这里插入图片描述

神奇的事情来了,通过执行如下命令,完成筛选合并。

可以发现,main分支从当前位置c1开始,依次提交c3 c4 c7

git cherry-pick c3 c4 c7

在这里插入图片描述

总结

最后,个人学习过程中用到的网站如下:

  • 基础概念:廖雪峰-git教程
  • 模拟实战:Learn Git Branching
  • 本地模拟:在本地模拟一个git远程仓库

2023.09.01


  1. 工作区和暂存区 ↩︎

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

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

相关文章

风控引擎如何快速添加模型,并实时了解运行状态?

目录 风控模型的主要类型 风控引擎如何管理模型&#xff1f; 模型就是基于目标群体的大规模采样数据&#xff0c;挖掘出某个实际问题或客观事物的现象本质及运行规律&#xff0c;利用抽象的概念分析存在问题或风险&#xff0c;计算推演出减轻、防范问题或风险的对策过程&…

死锁是什么?死锁的字节码指令了解?

用幽默浅显的言语来说死锁 半生&#xff1a;我已经拿到了机考的第一名&#xff0c;就差笔试第一名了 小一&#xff1a;我已经拿到了笔试的第一名&#xff0c;就差机考第一名了 面试官&#xff1a;我很看好你俩&#xff0c;继续"干", 同时拿到2个的第一名才能拿到offe…

win10 ping不通 Docker ip(解决截图)

背景&#xff1a; win10下载了docker desktop就是这个图&#xff0c;然后计划做一个springboot连接docker。 docker部署springboot :docker 部署springboot(成功、截图)_總鑽風的博客-CSDN博客 问题&#xff1a;spring boot部署docker后&#xff0c;docker接口通了&#xff0…

Java之文件操作与IO

目录 一.认识文件 1.1文件是什么&#xff1f; 1.2文件的组织 1.3文件路径 1.4文件的分类 二.文件操作 2.1File概述 三.文件内容操作--IO 3.1JavaIO的认识 3.2Reader和Writer ⭐Reader类 ⭐Writer类 3.2FileInputStream和FileOutputStream ⭐FileInputStream类 …

Weblogic SSRF【漏洞复现】

文章目录 漏洞测试注入HTTP头&#xff0c;利用Redis反弹shell redis不能启动问题解决 Path : vulhub/weblogic/ssrf 编译及启动测试环境 docker compose up -dWeblogic中存在一个SSRF漏洞&#xff0c;利用该漏洞可以发送任意HTTP请求&#xff0c;进而攻击内网中redis、fastcgi…

DDR2 IP核调式记录2

本文相对简单&#xff0c;只供自己看看就行。从其它的博客找了个代码&#xff0c;然后记录下仿真波形。 1. 功能 直接使用quartus生成的DDR2 IP核&#xff0c;然后实现循环 -->写入burst长度的数据后读出。 代码数据的传输是32位&#xff0c;实际使用了两片IC。因此IP核也是…

8月《中国数据库行业分析报告》已发布,聚焦数据仓库、首发【全球数据仓库产业图谱】

为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况&#xff0c;从2022年4月起&#xff0c;墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数据库行业分析报告》&#xff0c;持续传播数据技术知识、努力促进技术创新与行业生…

【分布式搜索引擎es】

文章目录 数据搜索DSL实现查询文档搜索结果处理 RestClient实现 旅游案例酒店搜索和分页酒店结果过滤我周边的酒店酒店竞价排名 elasticsearch最擅长的是 搜索和 数据分析。 数据搜索 DSL实现 查询文档 常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数…

读SQL学习指南(第3版)笔记11_字符串函数和数值函数

1. 尽管SQL标准指定了部分函数&#xff0c;但数据库厂商并没有遵循这些函数规范 2. 字符串 2.1. char 2.1.1. 固定长度、不足部分用空格填充的字符串 2.1.2. MySQL允许的char类型的最大长度为255个字符 2.1.3. Oracle Database允许的最大长度为2,000个字符 2.1.4. SQL Se…

Java 面试 - Redis

Redis Redis 是基于键值对的非关系型数据库。Redis 拥有string、hash、list、set、zset等多种数据结构, redis具有惊人的读写性能, 其优秀的持久化机制是的它在断电和机械故障时也不会发生数据丢失, 可以用于热点数据存放, 还提供了键过期、发布订阅、食物、流水线、LUA脚本等多…

按钮控件的基类--- QAbstractButton 类(抽象类)

1、QAbstractButton 属性 QAbstractButton 属性速查表属性名说明属性名说明autoExclusive自动排他性checked是否被选中autoRepeat是否启用自动重复down是否处于按下状态autoRepeatDelay初始延迟(毫秒)icon按钮上显示的图标autoRepeatInterval时间间隔(毫秒iconSize显示的图标的…

Vue + Element UI 前端篇(十二):用户管理模块

Vue Element UI 实现权限管理系统 前端篇&#xff08;十二&#xff09;&#xff1a;用户管理模块 用户管理模块 添加接口 在 http/moduls/user.js 中添加用户管理相关接口。 import axios from ../axios/* * 用户管理模块*/// 保存 export const save (params) > {ret…

windows查看端口占用,通过端口找进程号(查找进程号),通过进程号定位应用名(查找应用)(netstat、tasklist)

文章目录 通过端口号查看进程号netstat通过进程号定位应用程序tasklist 通过端口号查看进程号netstat 在Windows系统中&#xff0c;可以使用 netstat 命令来查看端口的占用情况。以下是具体的步骤&#xff1a; 打开命令提示符&#xff08;CMD&#xff09;&#xff1a;按WinR组…

Linux简介

为什么选择Linux&#xff1f; Linux是一个优秀的操作系统 硬件方面&#xff1a;适合嵌入式&#xff0c;服务器&#xff0c;移动设备&#xff0c;桌面&#xff0c;计算机集群和超级计算机应用方面&#xff1a;人工智能&#xff0c;分布式计算&#xff0c;云计算&#xff0c;大数…

电气工程中重要的测量术语:“kVRMS” | 百能云芯

在电气工程和电子领域&#xff0c;术语“kVRMS”至关重要。它是工程师和技术人员用来准确评估电气系统电压的关键测量方法。在这篇综合文章中&#xff0c;我们将深入探讨 kVRMS 的含义、其意义、应用。 kVRMS 代表“千伏均方根”。为了理解这个术语&#xff0c;我们来分解一下&…

Linux的服务器日志分析及性能调优

作为网络安全和数据传输的重要环节&#xff0c;代理服务器在现代互联网中扮演着至关重要的角色。然而&#xff0c;在高负载情况下&#xff0c;代理服务器可能面临性能瓶颈和效率问题。本文将介绍如何利用Linux系统对代理服务器进行日志分析&#xff0c;并提供一些实用技巧来优化…

rpm打包

文章目录 rpm打包 1. rpm打包步骤0&#xff09;准备工作&#xff1a;安装打包工具rpm-build和rpmdevtools&#xff08;1&#xff09;在线安装&#xff08;2&#xff09;离线安装 1&#xff09;创建初始化目录2&#xff09;准备打包内容3&#xff09;编写打包脚本 spec文件4&…

测试需求分析

什么是软件测试需求&#xff1a; 灰度测试&#xff1a;先发布部分功能&#xff0c;然后看用户的反馈&#xff0c;再去发布另外一部分的更新 A/B测试&#xff1a;先发布的功能先让A部分的用户进行更新&#xff0c;再根据用户的犯困再更新B用户的功能 需求测试&#xff1a; 功…

hive 基础知识

一 hive 是什么 在本节前我们需要明确 hive 是什么 上面两个代码块&#xff0c;左边的是 mapreduce 的代码块&#xff0c;右边的是hive 的代码块 很容易看出来&#xff0c;右边的 hive 写起来要更容易更快些&#xff0c;而执行效率&#xff0c;右边的 hive 只比左边多一个翻译…

Redis 7 第六讲 主从模式(replica)架构篇

🌹🌹🌹 此篇开始进入架构篇范围(❤艸`❤) 理论 即主从复制,master以写为主,Slave以读为主。当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。 使用场景 读写分离 容灾备份数据备份水平扩容主从架构 演示案例 注:masterauth、replicaof主…