Git - 补充工作中常用的一些命令
Git - 补充工作中常用的一些命令
- 1 一些场景
- 1.1 场景1
- 1.2 场景2
- 1.3 场景3
- 1.4 场景4
- 1.5 场景5
- 1.6 场景6
- 1.7 场景7
- 1.8 场景8
- 1.9 场景9
- 1.10 场景10
- 1.11 场景11
- 1.12 场景12
- 1.13 场景13
- 1.14 场景14
- 1.15 场景15
- 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\- file
- 3 git checkout commitID和git reset --hard commitID的区别
- 3.1 git checkout commitID
- 3.2 git reset --hard commitID
- 3.3 使用场景对比
- 4 git rebase -i
1 一些场景
1.1 场景1
如何将分支hotfix/bug-123的提交 abc,拿到 feature/bug-123分支?
假设你当前在feature分支
有三种方法:
- 使用 git cherry-pick
git checkout feature/bug-123
git cherry-pick abc
# 解决冲突(如果有)
git add <冲突文件>
git cherry-pick --continue
# 此时提交 abc 现在已经被应用到 feature/bug-123 分支
- 使用 git merge
如果 hotfix/bug-123 分支只有提交 abc 是你需要的,可以直接合并整个分支
git checkout feature/bug-123
git merge hotfix/bug-123
# 解决冲突(如果有)
git add <冲突文件>
git commit
# 此时hotfix/bug-123 分支的提交(包括 abc)现在已经被合并到 feature/bug-123 分支
- 使用 git rebase
如果 feature/bug-123 分支需要保持线性历史,可以使用 rebase
git checkout feature/bug-123
git rebase hotfix/bug-123
# 解决冲突(如果有)
git add <冲突文件>
git rebase --continue
# 此时feature/bug-123 分支现在包含了 hotfix/bug-123 分支的提交(包括 abc),并且提交历史是线性的
推荐方法:使用 git cherry-pick,因为它只提取指定提交,不会引入其他无关的更改
1.2 场景2
你刚提交的 commit message 写错了,如何快速修改?
- 执行交互式 rebase:
在终端中输入以下命令,打开交互式 rebase 界面,HEAD~1 表示最近的一次提交:
git rebase -i HEAD~1
- 编辑提交信息
这时会打开一个编辑器,显示类似以下内容:
pick <commit_hash> <commit_message>
pick 代表要保持这个提交不变。将 pick 改为 reword,然后保存退出编辑器
reword <commit_hash> <commit_message>
- 修改提交信息
执行完 rebase 后,Git 会再次打开编辑器,让你修改提交信息。你可以在这里编辑提交的 message - 完成 rebase
修改完提交信息后,保存并关闭编辑器。Git 会自动完成 rebase,并更新提交信息
1.3 场景3
如何暂存本地修改,以切换到其他工作分支?请写出关键的git 命令?
使用 git stash 将当前修改保存到栈中、
git stash
这会将工作目录和暂存区的修改都暂存起来,并恢复到上次提交的状态
1.4 场景4
git status 显示了一堆无关的文件,如何屏蔽这些无关文件的显示?
使用.gitignore 文件
1.5 场景5
切换分支后,由于代码目录下的编译缓存文件存在冲突导致编译出错。执行什么清除命令删除所有无关文件?
使用 git clean 清除未跟踪的文件
git clean 命令用于删除工作目录中未跟踪的文件(例如编译缓存文件、临时文件等),这些文件没有被添加到 Git 版本控制中
git clean -fd
# -f:强制删除文件(Git 默认会保护未跟踪的文件,使用 -f 强制执行删除操作)
# -d:删除未跟踪的目录(如果有的话)
1.6 场景6
你错误提交了一个远程分支(feature儿ask-2233),如何删除它?
要删除远程分支,使用 git push 命令并指定删除操作。远程分支的删除可以通过以下命令实现
git push origin --delete feature/task-2233
1.7 场景7
如何 clone 所有子模块?假设主项目已克隆在本地
- 初始化子模块
首先,进入到你已经克隆的主项目目录,然后使用 git submodule update --init 来初始化子模块。这个命令会根据主项目中的 .gitmodules 配置文件初始化子模块
cd /path/to/your/repo # 进入你的主项目目录
git submodule update --init
- 更新所有子模块(包括嵌套的子模块)
如果主项目中有子模块嵌套子模块(即子模块也有自己的子模块),你可以使用 --recursive 选项来递归地初始化和更新所有子模块
git submodule update --init --recursive
- 克隆子模块的最新版本
如果你希望更新到子模块的最新版本,或者确保它们与主项目同步,可以使用以下命令
git submodule update --remote --recursive
- 查看子模块的状态
你可以使用 git submodule status 来查看当前子模块的状态,确保它们已经正确地初始化和更新
git submodule status
1.8 场景8
Git 如何配置用户名(假设叫 Zhang San)?
git config --global user.name "Zhang San"
这个命令会全局配置你的 Git 用户名为 “Zhang San”,也就是说,你在所有仓库中都会使用这个名字
如果你想只为某个特定仓库设置用户名,可以在该仓库目录下执行以下命令,去掉 --global
git config user.name "Zhang San"
1.9 场景9
当你在另一分支修复 bug 并提交之后,返回feature/task-2233 继续工作,如何重新应用之前的修改?
git stash pop
1.10 场景10
列出所有 v8.0.55xx开头的标签
git tag -l "v8.0.55*"
1.11 场景11
查看提交 e44c5c2的详细内容(commit message 以及修改内容)
- 查看提交消息和详细信息
git show e44c5c2
这将显示该提交的详细内容,包括:
- 提交的 hash(e44c5c2)
- 提交的作者信息(姓名和邮箱)
- 提交的日期
- 提交的消息(commit message)
- 所有修改的文件和内容

- 只查看提交消息
如果你只关心提交消息,可以使用以下命令
git log -1 --format=%B e44c5c2

3. 查看修改内容
如果你需要查看修改的具体内容(即每个文件中有哪些行被添加、删除或者修改),使用 git diff
git diff e44c5c2^!

1.12 场景12
如何将当前所在的本地分支名称 hotfix/1234修改为hotfix/bug-1234?
- 确保你在 hotfix/1234 分支上
首先,确认你当前在 hotfix/1234 分支上。如果你还没有切换到该分支,可以使用以下命令
git checkout hotfix/1234
- 重命名本地分支
使用 git branch -m 命令来重命名当前的本地分支
git branch -m hotfix/bug-1234
这将把 hotfix/1234 本地分支重命名为 hotfix/bug-1234
- 更新远程分支(如果需要)
如果你已经将 hotfix/1234 推送到了远程仓库,并且想要将远程分支也重命名,你需要执行以下步骤:
删除远程旧分支(hotfix/1234)
git push origin --delete hotfix/1234
推送新分支(hotfix/bug-1234)
git push origin hotfix/bug-1234
设置上游分支(用于跟踪远程分支)
git push --set-upstream origin hotfix/bug-1234
1.13 场景13
如何将当前所在的本地分支名称 hotfix/1234修改为hotfix/bug-1234?
确定目标 commit-id,通过以下命令基于该提交创建一个新的分支
git checkout -b support <commit-id>
1.14 场景14
如何将新增加修改追加到最近一个提交?
- 首先,添加你的修改到暂存区
git add your-file
- 使用 git commit --amend 追加修改
然后,使用 git commit --amend 命令来修改最近的提交,将新修改合并到这个提交中
git commit --amend
执行这个命令后,Git 会打开你的默认编辑器,让你可以修改提交信息。如果你不需要修改提交信息,可以直接保存并关闭编辑器
3. 完成
这样,你的修改就会被追加到最近的提交中,提交历史看起来就像是一次提交
1.15 场景15
如何将你的 hotrix 分支与主分支master 的最新修改对齐?(假设不会产生冲突)
- 首先切换到 hotrix 分支
git checkout hotrix
- 拉取master分支的最新修改
如果你本地的 master 分支没有更新,你需要首先拉取远程仓库中的 master 分支最新的更改
git fetch origin master
- 执行 rebase 操作
现在,运行以下命令将 hotrix 分支的提交“移动”到 master 分支的最新提交之后
git rebase origin/master
这将把 hotrix 分支上的提交重新应用到 master 分支的最新提交之后。如果没有冲突,rebase 操作会自动完成
2 git cherry-pick <commit-hash> 和 git checkout branch -- file
- git cherry-pick
- 作用:将某个提交(commit)应用到当前分支
- 使用场景:当你需要将另一个分支的某个特定提交(包括其更改)应用到当前分支时使用
- 操作对象:提交(commit),而不是单个文件
- 命令格式:
git cherry-pick <commit-hash> - 特点:
- 会将指定提交的更改应用到当前分支,并生成一个新的提交。
- 适用于跨分支复制某个提交的更改。
- 如果提交涉及多个文件,所有文件的更改都会被应用。
- git checkout branch – file
- 作用:将某个分支中的特定文件覆盖到当前工作目录。
- 使用场景:当你需要将另一个分支的某个文件的状态复制到当前分支时使用。
- 操作对象:单个文件,而不是提交。
- 特点:
- 只操作单个文件,不会影响其他文件。
- 不会生成新的提交,你需要手动 git add 和 git commit。
- 适用于从另一个分支恢复某个文件的状态。
总结:
- 如果你需要复制某个提交的所有更改,使用 git cherry-pick。
- 如果你只需要复制另一个分支的某个文件,使用 git checkout branch – file
3 git checkout commitID和git reset --hard commitID的区别
git checkout commitID 和 git reset --hard commitID 都可以将 Git 仓库的状态恢复到指定的提交,但是它们的工作方式和影响有所不同。具体区别如下:
3.1 git checkout commitID
- 作用:切换到指定的提交
commitID,使工作目录和暂存区的文件恢复到该提交的状态 - 行为:
- 该命令会让你的工作目录变为与 commitID 对应的文件内容一致,但是不会修改当前分支的历史,你依然停留在当前分支上
- 它会进入 分离头指针(detached HEAD) 状态,也就是说,Git 不再指向任何分支,而是指向了一个特定的提交。如果在这种状态下进行新的提交,Git 会创建一个新的分支,除非你显式地创建一个新分支
- 不会改变暂存区(index)的状态,因此不会丢失任何暂存的更改
- 适用场景
- 你想查看某个特定提交的内容,或者临时检查某个历史版本
- 你只想查看一个特定的提交,而不想修改当前分支
3.2 git reset --hard commitID
- 作用:将当前分支的指针重置到指定的 commitID,同时会重置工作目录和暂存区,使它们与该提交一致
- 行为:
- 改变当前分支的历史:它会把当前分支的指针(例如 master 或 main)指向 commitID,从而“丢弃”该提交之后的所有更改和提交
- 更改工作目录和暂存区:它会将工作目录中的所有文件和暂存区的文件恢复到 commitID 所对应的状态,所有未提交的更改都会丢失
- 删除历史提交:所有在 commitID 之后的提交都会被删除,分支的历史会被重写
- 适用场景:
- 你想彻底丢弃一些提交并重置代码状态,或者将分支回滚到某个特定提交
- 要小心使用,因为会删除所有本地更改,并且无法恢复被丢弃的提交(除非你有备份)
3.3 使用场景对比
- 如果你只是想查看某个提交,不打算修改当前分支,可以使用 git checkout commitID
- 如果你想删除当前分支上的提交,并回到某个历史点,丢弃所有后续的更改,则使用 git reset --hard commitID
4 git rebase -i
启动交互式 rebase
- 命令形式:
git rebase -i <commit-hash>或git rebase -i HEAD~n - 编辑 rebase 的操作:
- 示例:
pick 1234567 Commit message 1pick 2345678 Commit message 2
- 以下是一些常用的命令和作用:
- pick:保留该提交
- reword:保留提交,但修改提交信息
- edit:保留提交,但让你修改该提交的内容(例如,修改代码或文件)
- squash 或 s:将当前提交与前一个提交合并,并保留两者的提交信息
- fixup 或 f:将当前提交与前一个提交合并,并丢弃当前提交的提交信息(只保留前一个提交的信息)
- drop:删除当前提交
- exec:在该提交时执行一个命令
- 示例:
例如,你想将第 2 和第 3 个提交合并到第一个提交中,并修改它们的提交信息,可以将文件编辑为如下所示
pick 1234567 Commit message 1
squash 2345678 Commit message 2
squash 3456789 Commit message 3
编辑完成后,保存并关闭编辑器,Git 会继续执行 rebase 操作,应用你选择的操作。
- 如果有冲突,Git 会暂停 rebase,要求你解决冲突。你需要手动解决冲突,解决完冲突后,要add到暂存区,但不需要提交,然后使用
git rebase --continue继续 rebase - 如果你不想继续 rebase,可以使用
git rebase --abort来放弃 rebase 操作
编辑提交信息
如果你选择了 squash 或 reword,Git 会打开一个新的编辑器,允许你编辑提交信息。你可以选择保留原始信息,或者将提交信息合并为新的内容
相关文章:
Git - 补充工作中常用的一些命令
Git - 补充工作中常用的一些命令 1 一些场景1.1 场景11.2 场景21.3 场景31.4 场景41.5 场景51.6 场景61.7 场景71.8 场景81.9 场景91.10 场景101.11 场景111.12 场景121.13 场景131.14 场景141.15 场景15 2 git cherry-pick \<commit-hash\> 和 git checkout branch \-\-…...
电脑网络出现问题!简单的几种方法解除电脑飞行模式
在某些情况下,您可能需要关闭电脑上的飞行模式以便重新连接到 Wi-Fi、蓝牙或其他无线网络。本教程中简鹿办公将指导您如何在 Windows 和 macO S操作系统上解除飞行模式。 一、Windows 系统下解除飞行模式 通过快捷操作中心 步骤一:点击屏幕右下角的通知…...
CefSharp 文件下载和保存功能-监听前端事件
重点在 启用文件下载 和 通过 JavaScript 调用 C# 保存文件: 1. 添加文件下载处理器 (DownloadHandler) 在 VueFormService 类中,添加一个实现 IDownloadHandler 接口的类,用于处理文件下载到本地。 // 新增的 DownloadHandler 类 public c…...
PQL查询和监控各类中间件
1 prometheus的PQL查询 1.1 Metrics数据介绍 prometheus监控中采集过来的数据统一称为Metrics数据,其并不是代表具体的数据格式,而是一种统计度量计算单位当需要为某个系统或者某个服务做监控时,就需要使用到 metrics prometheus支持的met…...
【从零开始学习计算机科学】数字逻辑(九)有限状态机
【从零开始学习计算机科学】数字逻辑(九)有限状态机 有限状态机状态机的表示方法有限状态机的Verilog描述有限状态机 有限状态机(简称状态机)相当于一个控制器,它将一项功能的完成分解为若干步,每一步对应于二进制的一个状态,通过预先设计的顺序在各状态之间进行转换,状…...
java错题总结
本篇文章用来记录学习javaSE以来的错题 解答:重载要求俩个方法的名字相同,但参数的类型或者个数不同,但是不要求返回类型相同,所以A正确。 重写还需要要求返回类型相同(呈现父子类关系也可以,但是属于特例&…...
12.【线性代数】——图和网络
十二 图和网络(线性代数的应用) 图 g r a p h { n o d e s , e d g e s } graph\{nodes, edges\} graph{nodes,edges}1.关联矩阵2. A A A矩阵的零空间,求解 A x 0 Ax0 Ax0 电势3. A T A^T AT矩阵的零空间,电流总结电流图结论 …...
【C++】ImGui:VSCode下的无依赖轻量GUI开发
本教程将手把手带您用纯原生方式构建ImGui应用,无需CMake/第三方库。您将全程明了自己每个操作的意义,特别适合首次接触GUI开发的新手。 环境配置 安装VSCode 作用:轻量级代码编辑器,提供智能提示操作: 官网下载安装…...
新编大学应用英语综合教程2 U校园全套参考答案
全套答案获取: 链接:https://pan.quark.cn/s/389618f53143...
Python数据可视化——Matplotlib的基本绘图:图形、轴、标签
Matplotlib的绘图系统是由多个层次组成的,它的基本结构包括图形(Figure)、坐标轴(Axes)、刻度(Ticks)、标签(Labels)等多个部分。理解这些基本组件,有助于更好地使用Matplotlib绘制和优化图表。在本节中,我们将结合NumPy数组,详细讲解Matplotlib的基本结构,并展示…...
STM32之软件SPI
SPI传输更快,最大可达80MHz,而I2C最大只有3.4MHz。输入输出是分开的,可以同时输出输入。是同步全双工。仅支持一主多从。SS是从机选择线。每个从机一根。SPI无应答机制的设计。 注意:所有设备需要共地,时钟线主机输出&…...
Java 实现 Oracle 的 MONTHS_BETWEEN 函数
介绍 因为系统迁移, 有一些函数要转成 Java 版本, Oracle 的 官方介绍 - MONTHS_BETWEEN MONTHS_BETWEEN returns number of months between dates date1 and date2. The month and the last day of the month are defined by the parameter NLS_CALENDAR. If date1 is late…...
【从零开始学习计算机科学】数字逻辑(五) Verilog HDL语言
【从零开始学习计算机科学】数字逻辑(五) Verilog HDL语言 Verilog HDL语言8位全加器8位计数器2位比较器三态驱动器Verilog HDL模块的结构模块声明。端口定义。信号类型。功能描述verilog描述级别verilog关键字verilog标识符编写Verilog HDL源代码的标准数据类型常量变量nets…...
从零开始实现大语言模型(十三):预训练大语言模型GPTModel
1. 前言 使用梯度下降算法通过下一个token预测任务预训练大语言模型GPTModel,前向传播流程每次会输入一个batch的长度均为context_len的训练样本,执行 batch_size context_len \text{batch\_size}\times\text{context\_len} batch_sizecontext_len次下…...
Permute for Mac v3.12.1 文件格式转换器 支持M、Intel芯片
Mac毒搜集到的Permute 提供简单的视频格式转换功能,可以简单的将视频文件转换为你想要的格式。将你想要转换的视频拖到软件窗口内,然后选择你想要转换的格式即可。 应用介绍 Permute是一款Mac上易用的媒体格式转换工具,支持视频、音乐和图像…...
DeepSeek group-limited expert routing和负载均衡
Ref https://github.com/deepseek-ai/DeepSeek-V3/blob/main/inference/model.py GitHub - deepseek-ai/EPLB: Expert Parallelism Load Balancer DeepSeek-V3 Technical Report DeepSeek的路由方法 class Gate(nn.Module):def __init__(self, args: ModelArgs):super().__…...
智慧消防新篇章:4G液位/压力传感器,筑牢安全防线!
火灾无情,防患未“燃”!在智慧消防时代,如何实现消防水系统的实时监测、预警,保障人民生命财产安全?山东一二三物联网深耕物联网领域,自主研发4G液位、4G压力智能传感器,为智慧消防水位、水压无…...
C++ primier plus 函数探幽第二部分
系列文章目录 C primer plus 第一节 步入C-CSDN博客 C primer plus 第二节 hello world刨析-CSDN博客 C primer plus 第三节 数据处理-CSDN博客 C primer plus 第四节 复合类型-CSDN博客 C primer plus 第五节 循环-CSDN博客 C primier plus 第七节 函数探幽第一部分-CSDN博客 …...
DBus名词术语命名规范详解:构建清晰、规范的DBus通信
引言 DBus(Desktop Bus)是一种高效、灵活的进程间通信(IPC)机制,广泛应用于Linux桌面环境中。为了确保DBus通信的清晰性和规范性,DBus定义了一套严格的命名规范,涵盖了总线、服务名、对象路径、…...
用低代码平台集成人工智能:无需专业开发也能实现智能化
引言:人工智能的普及与企业需求 随着人工智能(AI)技术的飞速发展,越来越多的企业开始意识到其在提升运营效率、优化客户体验和推动业务创新方面的巨大潜力。从智能客服到自动化决策支持,从数据分析到个性化推荐&#x…...
Java停车平台高并发抢锁技术方案设计 - 慧停宝开源停车管理平台
Java停车平台高并发抢锁技术方案设计 一、业务场景特征 瞬时流量峰值 早晚高峰时段(07:30-09:00, 17:30-19:00)请求量激增10倍热门商圈停车场每秒并发请求可达5000 QPS 资源竞争特性 单个车位被多人同时抢占(超卖风险)用户操作链…...
C++关键字:typename 用于依赖名消歧器(disambiguator)
目录 1. 说明 2. 示例 1. 说明 在模板(包括别名模板)的声明或定义中,非当前实例的成员且依赖于模板参数的名称不视为类型,除非使用关键字 typename 或除非它已被建立为类型名称(例如使用 typedef 声明或用于命名基…...
第六课:数据库集成:MongoDB与Mongoose技术应用
本文详细介绍了如何在Node.js应用程序中集成MongoDB数据库,并使用Mongoose库进行数据操作。我们将涵盖MongoDB在Ubuntu 20系统中的安装、Bash命令的CRUD操作、Mongoose数据建模(Schema/Model)、关联查询与聚合管道,以及实战案例—…...
TypeError: Cannot set properties of undefined (setting ‘xxx‘)
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
Gravitino源码分析-SparkConnector 实现原理
Gravitino SparkConnector 实现原理 本文参考了官网介绍,想看官方解析请参考 官网地址 本文仅仅介绍原理 文章目录 Gravitino SparkConnector 实现原理背景知识-Spark Plugin 介绍(1) **插件加载**(2) **DriverPlugin 初始化**(3) **ExecutorPlugin 初始化**(4) *…...
windows下使用msys2编译ffmpeg
三种方法: 1、在msys2中使用gcc编译 2、在msys2中使用visual studio编译(有环境变量) 3、在msys2中使用visual studio编译(无环境变量) 我的环境: 1、msys2-x86_64-20250221 2、vs2015 3、ffmpeg-7.1…...
Linux内核自定义协议族开发指南:理解net_device_ops、proto_ops与net_proto_family
在Linux内核中开发自定义协议族需要深入理解网络协议栈的分层模型。net_device_ops、proto_ops和net_proto_family是三个关键结构体,分别作用于不同的层次。本文将详细解析它们的作用、交互关系及实现方法,并提供一个完整的开发框架。 一、核心结构体的作用与层级关系 struct…...
可视化+图解链表
链表(Linked list)是一种常用的数据结构,它由一系列节点组成,每个节点包含数据域和指针域。指针域存储了下一个节点的地址,从而建立起各节点之间的线性关系。 1、链表节点 1.1 节点构成 链表节点如下图所示ÿ…...
Docker参数,以及仓库搭建
一。Docker的构建参数 注释: 1.对于CMD,如果不想显示,而是使用交互界面:docker run -ti --rm --name test2 busybox:v5 sh 2.对于CMD,一个交互界面只可以使用一个,如果想多次使用CMD,则用ENTR…...
正十七边形尺规作图证明——从高斯的发现到几何实现
正十七边形尺规作图证明——从高斯的发现到几何实现 1. 引言:一个历史性的数学突破 在欧几里得几何中,尺规作图(仅使用直尺和圆规)是最为基础的几何构造方法。古希腊数学家已知如何构造正三角形、正方形和正五边形,但…...
