git 常用命令之 git checkout
大家好,我是 17。
git checkout 是 git 中最重要最常用的命令之一,本文为大家详细解说一下。
恢复工作区
checkout 的用途之一是恢复工作区。
git checkout .
checkout . 表示恢复工作区的所有更改,未跟踪的文件不会有变化。
恢复工作区的所有文件风险比较大,会丢失所有工作区的修改,一定要慎用
git checkout -- a.txt
中间加上 – 就安全多了,可以只恢复单个文件。
版本切换
git checkout master 取出 master 分支,HEAD 指向 master
git checkout 907d3ba 取出最后提交为 commit id 为 907d3ba 这个版本,HEAD 转到 907d3ba,和 master 分离。
取出分支的时候 HEAD 会指向当前分支。取出某个版本,HEAD也会跟着指过来,分支不动。这会造成 HEAD 和分支 分离。在分离 HEAD 的情况下,可以查看,提交,做各种试验,如果对结果满意,可以就地打新分支保留这些提交:
git checkout -c <new-branch-name>
如果不满意,什么也不用做,切回当前分支既可。
git checkout master 修正 HEAD 指向 master 分支
如果不知道哪前分支名也没关系 checkout - 同样会修正 HEAD。
git checkout -
如果要开发新功能,直接在某个提交上打分支即可,为什么要分离 HEAD?原因是这样比较轻量。比如你现在想开发一个功能,但不知道是否可行,所以先试验一下,确认好了再打分支。如果直接打分支,觉得不合适还得删除。因为分支没有合并,还删不掉,删除还得加强制删除参数。
分离头指针的操作相当于 先上车,后补票 。上车后又下车,不用买票,只有到终点才需要补票。
强制拉分支
git checkout -B dev
假定 dev 存在,如果没有 -B 参数,会报错,加上 -B 会覆盖原来的 dev 分支,打一个新的 dev 分支出来,并转到 dev 分支。
省得费心起名了。如果并行的只有一个任务,可以每次都用 dev 分支开发。
从某个 commit 打分支
我们打分支的时候,默认会从 HEAD 处开始,对于 master 分支来说,就是 G。
如果从 F 处打分支出来,可以用第二个参数指定
git checkout -b dev F也可以这样写
git checkout -b dev HEAD^
孤儿分支
有这样一个参数 --orphan, orphan 的英文原意是孤儿,如果我们要打一个设计文档分支出来这样写
git checkout --orphan design
因为设计文档和开发的代码完全是独立的部分,不适合和开发代码放一个分支上。
之所以称为孤儿分支,是因为这个分支是完完全全独立的,和以前所有的分支没有任何关联。和其它分支是平行的,永远不会相交。
就算孤儿分支是从 master 分支打出来的,你在 master 分支 执行 git log --oneline 也找不到任何有关孤儿分支的痕迹。当然更无法 merge 一个孤儿分支,实际上,也没有这个需求。
孤儿分支刚生成的时候,没有父提交,也没有任何提交,完全是空的,暂存区和工作区一般来说会有内容,因为我们要存设计文档,原来的内容都没有用,删除
git rm -rf .
现在我们得到了一个纯净的,独立的分支,可以添加设计文档了,并生成第一个提交。
可能你会有疑问,既然我们要一个孤儿分支,为什么还要初始化内容给我们?因为我们可能还有这样的需求:需要一个起点,而不是从一无所有开始。
试想这样的场景:项目开发半年了,市场反馈却是平平,老板觉得这样下去不是办法,需要另寻出路,但又不想放弃现在的方向。因为这次是方向性的问题,改动比较大,如果打普通分支的话,可能无法向主干合并。于是老板想出了一个办法,新建一个孤儿分支,完全独立来验证新想法,如果新方向正确,就可以代取代原来的方向。
从头来实现项目来验证新想法显然是不实际的,可以从项目中选择合适的节点,比如 F 节点,以这个为基础。
git checkout --orphan laboratory F
新分支生成后,会把 F 节点的所有内容带到暂存区和工作区,我们全部保留,在这个基础上开发。laboratory 和原来的 master 分支的级别是完全一样的,laboratory 就相当于原来的 master 分支。master 只是提供了一个起点。laboratory 后面如何发展和 master 完全没有关系。
选择合并
git checkout master
git merge dev
merge dev 的时候发生的冲突,这时可以打开冲突文件手动修改,也可以自动修改
git checkout --ours a.txt
git checkout --theirs a.txt
下面举例说明一下如何自动修改。
首先制造一个 merge 冲突的现场。起点在 master 分支。 在 master 分支 和 dev 分支同时修改 a.txt 的第一行,
echo init >a.txt
git add a.txt
git commit -m 'add a.txt'git checkout -b dev
echo dev >a.txt
git add a.txt
git commit -m 'alter a.txt'git checkout master
echo master >a.txt
git add a.txtgit merge dev
看下 a.txt 的内容 cat a.txt
<<<<<<< HEAD
master
=======
dev
>>>>>>> dev
上面的是 master 的修改,下面的是 dev 的修改。
如果现在后悔了,想取消合并,恢复到合并前的状态,
git merge --abort
自动修改用 git checkout 命令。我们可以选择保留 master 分支的内容
git checkout --ours -- a.txt
查看 a.txt 内容,已经恢复正常了。
master
如果发现这不是我们要的结果,可以恢复冲突现场
git checkout -m -- a.txt
查看 a.txt ,又恢复到冲突状态了。这次我们选择 dev 的内容。
git checkout --theirs -- a.txt
检查内容无误后,添加到暂存区。
git add a.txt
冲突解决完了,但 merge 还没完成。
git merge --continue
这时弹出编辑器,可以修改提交信息,确认后会自动提交修改的内容。merge 完成。
新加的 git switch
你会发现 checkout 承载了很多分支相关的命令。为了让命令更清晰,新版 git 增加了 switch 命令。
switch 能做的事 checkout 都能做。
switch 命令的功能很纯粹,就是切换分支,如果分支不存在,顺便新建分支。
举两个常见的例子。
| switch | checkout |
|---|---|
| git switch master | git checkout master |
| git switch -c dev | git checkout -c dev |
| git switch --orphan | git checkout --orphan |
切分支的时候建议把工作区和暂存区的内容都提交
新加的 git restore
和增加 git switch 同样的原因,新版本增加了 git resotre 命令。
git resotre 的职责是恢复工作区和暂存区。原来 checkout 能做的,它都能做。它能做的, checkout 可能做不了。
--worktree 是 git restore 的默认参数
git restore a.txt 把暂存区 a.txt 的内容恢复到工作区
git restore . 恢复工作区的所有内容。git restore --staged a.txt 把 HEAD 的 a.txt 恢复到暂存区git restore --source=HEAD --staged --worktree a.txt 恢复工作区和暂存区
–source 表示从哪里来,默认是 HEAD --staged 表示恢复到暂存区,–worktree 表示恢复到工作区。这三个参数有简写方式。
git restore -s HEAD -SW a.txt
当 merge 发生冲突时,也可以用 restore 来解决冲突,用法同 checkout。
相关文章:
git 常用命令之 git checkout
大家好,我是 17。 git checkout 是 git 中最重要最常用的命令之一,本文为大家详细解说一下。 恢复工作区 checkout 的用途之一是恢复工作区。 git checkout . checkout . 表示恢复工作区的所有更改,未跟踪的文件不会有变化。 恢复工作区的所有文件风…...
一些常见错误
500状态码: 代表服务器业务代码出错, 也就是执行controller里面的某个方法的过程中报错, 此时在IDEA的控制台中会显示具体的错误信息, 所以需要去看IDEA控制台的报错404状态码: 找不到资源找不到静态资源 检查请求地址是否拼写错误 检查静态资源的位置是否正确 如果以上都没有问…...
[单片机框架][调试功能] 回溯案发现场
程序莫名死机跑飞,不知道问题,那么下面教你回溯错误源 回溯案发现场一、修改HardFault_Handler1. xx.s 在启动文件,找到HardFault_Handler。并修改。2. 定义HardFault_Handler_C函数。(主要是打印信息并存储Flash)3. 根…...
MySQL主从同步-(二)搭建从机服务器
在docker中创建并启动MySQL从服务器:**端口3307docker run -d \-p 3307:3306 \-v /atguigu/mysql/slave1/conf:/etc/mysql/conf.d \-v /atguigu/mysql/slave1/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD123456 \--name atguigu-mysql-slave1 \mysql:8.0.3创建MyS…...
Linux系列 备份与分享文档
作者简介:一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.备份与分享文档 1.使用压缩和解压缩工具 (1&…...
SNI生效条件 - 补充nginx-host绕过实例复现中SNI绕过的先决条件
文章目录1.前置环境搭建2.测试SNI生效条件(时间)3. 证书对SNI的影响3.1 双方使用同一个证书:3.2 双方使用不同的证书与私钥4. 端口号区分测试4.1 端口号区分,证书区分:4.2 端口号区分,证书不区分:5.总结SNI运行机制6. SNI机制绕过…...
傻白探索Chiplet,Modular Routing Design for Chiplet-based Systems(十一)
阅读了Modular Routing Design for Chiplet-based Systems这篇论文,是关于多chiplet通信的,个人感觉核心贡献在于实现了 deadlock-freedom in multi-chiplet system,而不仅仅是考虑单个intra-chiplet的局部NoC可以通信,具体的一些…...
C语言静态库、动态库的封装和注意事项
1、动态库、静态库介绍 参考博客:《静态库和动态库介绍以及Makefile》; 2、代码目录结构和编译脚本 参考博客:《实际工作开发中C语言工程的目录结构分析》; 3、编写库的流程 (1)明确需求:需求是否合理、需求的使用场景、需求可能遇…...
MyBatis-Plus分页插件和MyBatisX插件
MyBatis-Plus分页插件和MyBatisX插件六、插件1、分页插件a>添加配置类b>测试八、代码生成器1、引入依赖2、快速生成十、MyBatisX插件1、新建spring boot工程a>引入依赖b>配置application.ymlc>连接MySQL数据库d>MybatisX逆向生成2、MyBatisX快速生成CRUD申明…...
年前无情被裁,面试大厂的这几个月…
2月份了,金三银四也即将来临,在这个招聘季,大厂也开始招人,但还是有很多人吐槽说投了很多简历,却迟迟没有回复… 另一面企业招人真的变得容易了吗?有企业HR吐槽,简历确实比以前多了好几倍&…...
基于Java的分片上传功能
起因:最近在工作中接到了一个大文件上传下载的需求,要求将文件上传到share盘中,下载的时候根据前端传的不同条件对单个或多个文件进行打包并设置目录下载。 一开始我想着就还是用老办法直接file.transferTo(newFile)就算是大文件,…...
KDS安装步骤
KDS kinetis design studio 软件 第一步官网(https://www.nxp.com/ 注册账号下载set成功下载软件。 随着AI,大数据这些技术的快速发展,与此有关的知识也普及开来。如何在众多网站中寻找最有价值的信息,如何在最短的时间内获得最新的技…...
JavaSE-线程池(1)- 线程池概念
JavaSE-线程池(1)- 线程池概念 前提 使用多线程可以并发处理任务,提高程序执行效率。但同时创建和销毁线程会消耗操作系统资源,虽然java 使用线程的方式有多种,但是在实际使用过程中并不建议使用 new Thread 的方式手…...
开源代码的寿命为何只有1年?
说实话,如果古希腊的西西弗斯是一个在2016年编写开源代码的开发者,那他会有宾至如归的感觉。著名的西西弗斯处罚,是神话流传下来的,他被迫推一块巨大的石头上山,当登顶之后,只能眼睁睁看着它滚下去…...
完善登录功能--过滤器的使用
系列文章目录 Spring Boot读取配置文件内容的三种方式 Spring Boot自动配置–如何切换内置Web服务器 SpringBoot项目部署 上述为该系列部分文章,想了解更多可看我博客主页哦! 文章目录系列文章目录前言一、创建自定义过滤器LoginCheckFilter二、在启动类…...
CSS基础:属性和关系选择器
字体属性 color 文本颜色 div{ color:red;} div{ color:#ff0000;} div{ color:rgb(255,0,0);} div{ color:rgba(255,0,0,.5);}font-size 文本大小 h1 {font-size:40px;} h2 {font-size:30px;} p {font-size:14px;}注意:chrome浏览器接受最小字体是12px font-we…...
设计模式:原型模式解决对象创建成本大问题
一、问题场景 现在有一只猫tom,姓名为: tom, 年龄为:1,颜色为:白色,请编写程序创建和tom猫属性完全相同的10只猫。 二、传统解决方案 public class Cat {private String name;private int age;private String color;…...
驱动开发(二)
一、驱动流程 驱动需要以下几个步骤才能完成对硬件的访问和操作: 模块加载函数 module_init注册主次设备号 <应用程序通过设备号找到设备>驱动设备文件 <应用程序访问驱动的方式> 1、手动创建 (mknod)2、程序自动创建file_oper…...
《狂飙》大结局,这22句经典台词值得细品
最近爆火的热播剧《狂飙》大家都看了吗? 剧情紧凑、演技炸裂、豆瓣评分9.0,可以说是开年评分最高的一部国产剧。 虽然大结局了。 里面有很多经典台词,值得每个人细细品味。 01 这世界不缺梦想 有本事你就去实现它 02 你这么善良 怎么跟坏…...
【计算机网络期末复习】第二章 物理层
✍个人博客:https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 📣专栏定位:为想复习学校计算机网络课程的同学提供重点大纲,帮助大家渡过期末考~ 📚专栏地址: ❤️如果有收获的话,欢迎点…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)
CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
AI书签管理工具开发全记录(十九):嵌入资源处理
1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...
在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)
考察一般的三次多项式,以r为参数: p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]; 此多项式的根为: 尽管看起来这个多项式是特殊的,其实一般的三次多项式都是可以通过线性变换化为这个形式…...
省略号和可变参数模板
本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
