Git复习
1. 引言
现在要用到Git,复习一下关于Git的指令,知识摘自《Pro Git》
2. 起步
git和其他版本控制软件最大的差别在于git是直接记录某个版本的快照,而不是逐渐地比较差异。


- 安装:
sudo apt install git-all - 设置用户信息:
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
- 配置vim为默认文本编辑器:
git config --global core.editor emacs - 查看配置情况:
git config --list - 查看某个命令的帮助
-heg:git add -h
3. Git基础
1. 初始化:git init,跟踪 git add,取消跟踪git rm cached
git add是一个多功能命令,用于开始跟踪新文件,或者把已跟踪的文件放到暂存区,还能用于合并时把有冲突的文件标记为已解决状态等。

b之前已被add,但是我又修改了一下,暂存区是之前add之后的,修改后但还没add的在工作区,不在暂存区,现在commit的话会提交add时的b的版本。
git status -s是简短的status的输出:

??表示新添加未跟踪的文件
A表示在暂存区
M表示修改过
D表示删除了
对某个文件取消跟踪
git rm --cached readme1.txt 删除readme1.txt的跟踪,并保留在本地。
git rm --f readme1.txt 删除readme1.txt的跟踪,并且删除本地文件。
2. 关于改动
看工作区内有哪些改动:git diff
看暂存区内哪些改动:git diff --staged


3. 删除
如果要删除一个已经被track的文件c.txt,首先从磁盘上删除rm c.txt,然后执行git rm c.txt从git中将其删除。

如果已经track了一个你不想track的文件d.txt,但是又不想从磁盘上删除,则使用git rm --cached README
4. 移动文件
git mv file_from file_to 在linux下就是重命名,git能检测到是改名

其实就相当于三条指令:
mv a.txt A.txt
git rm a.txt
git add A.txt
5. 查看提交历史
git log
git log -2查看最近的两次提交
显示每次提交所引入的2条差异:git log -p -2
6. 撤销操作
如果上次提交操作有一些纰漏(如忘记添加某个文件),但是又不想弄乱提交记录,就可以使用git commit --amend -m ,来替换上次的提交而不会再多一次提交记录。
git reset HEAD b.txt可以用于取消对b.txt文件的暂存。

使用git reset –hard 还原到某一次提交
git reset --hard commit ID
git reset --hard commit ID
git 2.25.1中取消暂存是git restore --staged a.txt,把a.txt取消暂存
git restore a.txt就取消对a.txt文件的保存。
7. 远程仓库
git remote
git remote -v 显示远程仓库的简写和URL

新添一个远程仓库。

- 添加一个新的远程 Git 仓库,同时指定一个方便使用的简写
pb
git remote add pb https://github.com/paulboone/ticgit
- 拉取仓库中有,但是我本地没有的信息:
git fetch pb
访问远程仓库,从中拉取我还没有的数据,完成后,我会拥有那个远程仓库中所有分支的引用。
git clone之后远程仓库默认为origin,git fetch origin会抓取clone后push的所有工作,git fetch只会将数据下载到本地仓库,并不会merge,如有需要,需要手动merge。git clone会自动设置本地master分支跟踪克隆仓库的master分支(或其他名字的默认分支),git pull origin通常会抓取服务器上的数据并尝试合并到当前所在的分支。
git push origin master将本地的项目推送至origin服务器,如果在推送之前有人又推送过了,必须先fetch后再push。
- 远程仓库的重命名
git remote rename pb paul
修改远程仓库pb名称为paul,注意这个操作同时也会修改所有远程分支的名字。
- 删除远程仓库
git remote remove paul
一旦删除,所有和这个远程仓库相关的远程跟踪分支以及配置信息都会一起被删除。
8. 标签
用途:用于给某个提交打标签,以示重要,典型的如发布时打上版本号。
分为轻量标签(lightweight)和附注标签(annotated)
轻量标签是某个特定提交的引用;
附注标签是一个对象,存储了annotater的名字、邮箱、日期、标签信息。
建议使用附注标签(含信息多)
打了标签的效果如下所示:

9. 共享标签(把本地标签推送到远程服务器上)
默认情况下git push 并不会传送标签到远程仓库服务器上,创建完标签后必须显式推送到服务器上。
git push origin v1.5
删除服务器上的标签:
git push origin --delete <tagname>
也可以本地删除之后push上去
git tag -d v1.4-lw
git push origin :refs/tags/v1.4-lw
10. Git别名
没什么大用,配置如下例:
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
4. Git分支
1. 分支创建
创建一个testing分支:
git branch testing
2. 分支切换
git checkout testing
创建一个新的分支并切换过去:
git checkout -b <newbranchname>
3. 查看分叉历史
git log --oneline --decorate --graph --all

4. 分支的合并 git merge to_be_merged_branch
把develop分支合并到master分支:
git checkout master
git merge develop
这里之前一直有些混乱,现在好好捋一捋:
《Progit》上面的一个案例:
master上工作到iss53时来了个电话要修复master上的bug,切换到master分支,再切一个新分支hotfix来修复bug:

修复完之后把hotfix分支merge到master上:
git checkout master
git merge hotfix
就成了下面这样:

此时hotfix分支不需要了,直接删除:
git branch -D hotfix
变成下面这样

然后需要继续回到iss53分支继续来电话之前我正在做的分支,iss53分支任务完成之后,需要把iss53分支合并到master分支上,但是他们不是共同的祖先分支,master的祖先是C2,iss53的祖先是C3
git checkout master
git merge iss53
git log --oneline --decorate --graph --all查看

合并完之后是这样:

此时不再需要iss53分支了,遂删除:
git branch -D iss53
特殊地:当相同的文件在不同的分支被修改,在merge时会产生conflit,此时的merge会先暂停,等待你把这部分conflit解决(到底决定保留哪种更改)之后再merge:


上图中在master分支和iss53分支都修改了index.html文件,======上侧的代表在HEAD所指的版本(此时HEAD所指master,所以上侧代表master内的修改),==下侧代表iss53内对index.html的修改,为了解决冲突,你必须选择有=分割的两部分中的一个。
5. rsync的使用
參考博客
常用指令:
push,把本地1/文件夹下的数据推送到远程的oem/param/文件夹下
rsync -a -zz --progress 1/ root@192.168.xx.xx:oem/param/
pull,把远程的oem/param/文件夹下的文件拉到本地的此处./
rsync -a -zz --progress root@192.168.xx.xx:oem/param/ ./
6. 关于smartgit的cherry pick
cherry pick是选择另一个分支的一个提交来提交到目标分支上,但是如果遇到conflict需要手动解决才能commit。参考博客

7. git更改远程分支名字
参考博客

相关文章:
Git复习
1. 引言 现在要用到Git,复习一下关于Git的指令,知识摘自《Pro Git》 2. 起步 git和其他版本控制软件最大的差别在于git是直接记录某个版本的快照,而不是逐渐地比较差异。 安装: sudo apt install git-all设置用户信息: git c…...
WebGPU学习(2)---使用VertexBuffer(顶点缓冲区)
在本文中,我们使用 VertexBuffer 绘制一个矩形。示例地址 1.准备顶点数据 首先,我们准备好顶点数据。定义顶点数据有多种方法,这次我们将在 TypeScript 代码中将其定义为 Float32Array 类型的数据。 const quadVertexSize 4 * 8; // 一个顶…...
【C++之容器篇】AVL树的底层原理和使用
目录前言一、AVL树二、AVL树的底层实现1. 结点类型的定义2. AVL树的定义3. 查找函数4. 插入函数(重难点)三、判断平衡树的方法前言 AVL树其实是在搜索树的基础上加上一些限制因素,从而使搜索树的结构保持相对平衡,通过前面我们对二叉搜索树的学习&#x…...
从交换机安全配置看常见局域网攻击
前言 构建零信任网络,自然离不开网络准入(NAC),这就涉及到交换机的一些安全测试,于是有了此文《从交换机安全配置看常见局域网攻击》。 交换机安全配置 如本文标题所说从交换机安全配置看常见的局域网攻击,那么下面提到的各种攻…...
工具篇3.5世界热力图
一、定义 世界热力图是一种地图形式,它使用颜色的变化来显示世界各个地区的某种指标(如 GDP、人口、气候等)的分布和密度。通常,世界热力图会使用不同的颜色来表示数据的变化,例如使用蓝色表示低值,红色表…...
2023-02-20 leetcode-insertionSortList
摘要: 记录leetcode-insertionSortList的反思 要求: https://leetcode.cn/problems/insertion-sort-list/ Given the head of a singly linked list, sort the list using insertion sort, and return the sorted lists head. The steps of the insertion sort algorithm: In…...
LeetCode初级算法题:环形链表+排列硬币+合并两个有序数组java解法
环形链表排列硬币合并两个有序数组(没错,出现过一次的LeetCode合并数组又双叒叕出现了!)经典算法题java解法 目录1 环形链表题目描述解题思路与代码解法一:哈希表解法二:双指针2 排列硬币题目描述解题思路与…...
网络编程学习一
1、初识网络编程2、网络编程三要素3、三要素(IP)4、IPV4的一些小细节5、Inetaddress类的使用package com.leitao.demo.network;import java.net.InetAddress; import java.net.UnknownHostException;/*** Description: TODO* Author LeiTao* Date 2023/2…...
Javascript 立即执行函数
IIFE,一般称为立即执行函数。你可能会问我,*“嘿!我知道正常的函数表达式是什么样子的,但是 IIFE 到底是什么?”。*好吧,这正是我今天要在本文中回答的问题。 函数表达式 在了解立即调用函数表达式之前,让…...
基于Django和vue的微博用户情感分析系统
完整代码:https://download.csdn.net/download/weixin_55771290/87471350概述这里简单说明一下项目下下来直接跑起的方法。前提先搞好python环境和vue环境,保证你有一个账户密码连上数据库mysql。1、pip install requirements.txt 安装python包2、修改mysql数据库的…...
【C++】IO流
🌈欢迎来到C专栏~~IO流 (꒪ꇴ꒪(꒪ꇴ꒪ )🐣,我是Scort目前状态:大三非科班啃C中🌍博客主页:张小姐的猫~江湖背景快上车🚘,握好方向盘跟我有一起打天下嘞!送给自己的一句鸡汤…...
【论文速递】ACL 2021-CLEVE: 事件抽取的对比预训练
【论文速递】ACL 2021-CLEVE: 事件抽取的对比预训练 【论文原文】:CLEVE: Contrastive Pre-training for Event Extraction 【作者信息】:Wang, Ziqi and Wang, Xiaozhi and Han, Xu and Lin, Yankai and Hou, Lei and Liu, Zhiyuan and Li, Peng and …...
《自动驾驶规划入门》专栏结语
一、 源起 2021年10月12日,化学工业出版社的金编辑根据博客中留下的微信号联系上我,问我有没有出书的想法。从小到大,书与文字在我心里是有着神圣地位的。我在“想试试”与“害怕做不好”这两种矛盾的心情中,还是先应了下来。签了…...
【数据结构与算法】2.八大经典排序
文章目录简介1.分析排序算法2.插入排序2.1.直接插入排序2.2.希尔排序3.选择排序3.1.直接选择排序3.2.堆排序3.2.1.堆的数据结构3.2.2.算法实现4.交换排序4.1.冒泡排序4.2.快速排序5.归并排序6.基数排序7.八大排序算法总结简介 排序对于任何一个程序员来说,可能都不会…...
Windows 免安装版mysql,快速配置教程
简单步骤 下载并解压mysql压缩包,把 “<mysql根目录>/bin” 路径添加到系统环境变量path中命令行执行 mysqld --initialize --console,初始化data目录(数据库表文件默认存放在" <mysql安装根目录>/data "目录下&#…...
空间误差分析:统一的应用导向处理(Matlab代码实现)
👨🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…...
【C++】引用、内联函数、auto关键字、范围for、nullptr
引用什么叫引用引用的特性常引用使用场景传值、传引用效率比较引用和指针的区别内联函数auto关键字(C11)基于范围的for循环(C11)指针空值nullptr(C11)引用 什么叫引用 引用不是新定义一个变量,而是给已存在变量取了一个别名,编译器不会为引用变量开辟内…...
pytest数据驱动
文章目录一、数据驱动概念二、数据驱动yaml1、yaml的基本语法:2、yaml支持的数据格式:3、安装4、使用5、读取方法a、目录结构b、yaml文件c、测试方法d、测试用例e、测试结果三、数据驱动excel1、安装导入2、操作3、读取方法a、目录结构b、excel文件c、测…...
OSI七层网络模型
应用层 定义了各种应用协议规范数据格式:HTTP协议、HTTPS协议、FTP协议、DNS协议、TFTP、SMTP等等。 表示层 翻译工作。提供一种公共语言、通信。 会话层 1、可以从校验点继续恢复数据进行重传。——大文件 2、自动收发,自动寻址的功能。 传输层 1、…...
易基因|MeRIP-seq揭示m6A RNA甲基化通过调控组蛋白泛素化来促进癌症生长和进展:Cancer Res
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。2022年05月16日,《Cancer Res》杂志发表了题为“M6A RNA Methylation Regulates Histone Ubiquitination to Support Cancer Growth and Progression”的研究论文,该…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...
如何在Windows本机安装Python并确保与Python.NET兼容
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
Monorepo架构: Nx Cloud 扩展能力与缓存加速
借助 Nx Cloud 实现项目协同与加速构建 1 ) 缓存工作原理分析 在了解了本地缓存和远程缓存之后,我们来探究缓存是如何工作的。以计算文件的哈希串为例,若后续运行任务时文件哈希串未变,系统会直接使用对应的输出和制品文件。 2 …...
Python常用模块:time、os、shutil与flask初探
一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...
前端调试HTTP状态码
1xx(信息类状态码) 这类状态码表示临时响应,需要客户端继续处理请求。 100 Continue 服务器已收到请求的初始部分,客户端应继续发送剩余部分。 2xx(成功类状态码) 表示请求已成功被服务器接收、理解并处…...
JS红宝书笔记 - 3.3 变量
要定义变量,可以使用var操作符,后跟变量名 ES实现变量初始化,因此可以同时定义变量并设置它的值 使用var操作符定义的变量会成为包含它的函数的局部变量。 在函数内定义变量时省略var操作符,可以创建一个全局变量 如果需要定义…...
