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 1
pick 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 \-\-…...

使用Python的requests库调用API并处理JSON响应的详细步骤
1. 安装request库 pip install requests 2. 发送GET请求 import requests# 定义API地址 url "https://api.example.com/data"# 发送GET请求 response requests.get(url)# 检查HTTP状态码 if response.status_code 200:# 解析JSON响应data response.json()prin…...

Mybatis如何通过databaseId属性支持不同数据库的不同语法
目录 一、前言 二、如何配置 三、源码解读 四、自定义 一、前言 在一次项目功能测试中,发现有个sql在其他嵌入式数据库中执行正常,但是在mysql中执行失败,发现是因为有个字段在mysql中是关键字,需要使用反引号(&…...

android edittext 防止输入多个小数点或负号
有些英文系统的输入法,或者定制输入法。使用xml限制不了输入多个小数点和多个负号。所以代码来控制。 一、通过XML设置限制 <EditTextandroid:id="@+id/editTextNumber"android:layout_width="wrap_content"android:layout_height="wrap_conten…...

windows部署spleeter 版本2.4.0:分离音频的人声和背景音乐
windows部署spleeter 版本2.4.0:分离音频的人声和背景音乐 一、Spleeter 是什么? Spleeter 是由法国音乐流媒体公司 Deezer 开发并开源的一款基于深度学习的音频分离工具。它能够将音乐中的不同音轨(如人声、鼓、贝斯、钢琴等)分…...

深度学习、宽度学习、持续学习与终身学习:全面解析与其在大模型方面的应用
目录 引言: 1. 深度学习(Deep Learning) 1.1 深度学习的基本概念 1.2 深度学习的数学原理 1.3 深度学习的特点 1.4 深度学习在大模型中的应用 2. 宽度学习(Wide Learning) 2.1 宽度学习的基本概念 2.2宽度学习…...

【量化科普】Arbitrage,套利
【量化科普】Arbitrage,套利 🚀量化软件开通 🚀量化实战教程 什么是套利? 套利(Arbitrage)是金融市场中的一种交易策略,指的是在不同市场或不同形式中同时买入和卖出相同或相似的金融产品&a…...

删除已加入 .gitignore却仍被git追踪的文件
.gitignore 文件只会影响未被跟踪的文件,而已经被 Git 跟踪的文件不会因为被添加到 .gitignore 而停止被跟踪。 eg:例如在创建.gitignore文件前,已经将sync.sh文件推送到远程分支,因此该文件已被git追踪。 去掉sync.sh文件追踪的步…...

pytest框架 核心知识的系统复习
1. pytest 介绍 是什么:Python 最流行的单元测试框架之一,支持复杂的功能测试和插件扩展。 优点: 语法简洁(用 assert 替代 self.assertEqual)。 自动发现测试用例。 丰富的插件生态(如失败重试、并发执…...

Spring Cloud Alibaba学习 5- Seata入门使用
Spring Cloud Alibaba学习 5- Seata入门使用 Seata是Spring Cloud Alibaba中用于分布式事务管理的解决方案 一. Seata的基本概念 1. Seata的三大角色 1> TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。TC作…...

WebAssembly技术及应用了解
WebAssembly(Wasm)是一种为Web设计的高效、低级的二进制指令格式,旨在提升Web应用的性能并支持多种编程语言。以下是对其核心概念、优势、应用场景及开发流程的系统介绍: 1. 核心概念 二进制格式:Wasm采用紧凑的二进制…...

Deepseek中的MoE架构的改造:动态可变参数激活的MoE混合专家架构(DVPA-MoE)的考虑
大家好,我是微学AI,今天给大家介绍一下动态可变参数激活MoE架构(Dynamic Variable Parameter-Activated MoE, DVPA-MoE)的架构与实际应用,本架构支持从7B到32B的等多档参数动态激活。该架构通过细粒度难度评估和分层专家路由,实现“小问题用小参数,大问题用大参数”的精…...

NodeJS学习笔记
NodeJS软件安装 node环境安装: https://nodejs.org 安装好后的node通常在C:\Program Files\nodejs验证安装是否成功 node -v npm -v 进入REPL模式命令行模式 nodeNodeJS在REPL模式和编辑器使用 windos在dos下常用命令 windos命令: 1、cmd dos系统2、…...

【交通网络拓扑图实现原理深度解析】
交通网络拓扑图实现原理深度解析 简易demo地址 背景故事:交通网络调度可视化的演进 1. 项目背景 在现代城市轨道交通系统中,交通网络线路的可视化展示一直是一个重要而复杂的问题。传统的交通网络线路图往往采用静态图片方式展示,这种方式…...

【极客时间】浏览器工作原理与实践-2 宏观视角下的浏览器 (6讲) - 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的?
https://time.geekbang.org/column/article/118826 2.6 渲染流程(下):HTML、CSS和JavaScript,是如何变成页面的? 2.5介绍了渲染流水线中的 DOM 生成、样式计算和布局三个阶段,2.6讲解渲染流水线后面的阶段…...

NO2.C++语言基础|C++和Java|常量|重载重写重定义|构造函数|强制转换|指针和引用|野指针和悬空指针|const修饰指针|函数指针(C++)
6. C 和 Java 区别(语⾔特性,垃圾回收,应⽤场景等) 指针: Java 语⾔让程序员没法找到指针来直接访问内存,没有指针的概念,并有内存的⾃动管理功能,从⽽有效的防⽌了 C 语⾔中的指针…...

【CSS】---- 纯 CSS 实现无限滚动轮播
1. 前言 仅使用 CSS 创建一个具有无限滚动轮播的动画,无需 JavaScript。首先是无限滚动轮播动画效果在我们常见的开发中都是借用 JavaScript 实现,如果纯粹使用 CSS,我觉得还是一个比较有趣的。 2. 效果预览 3. 效果分析 一屏展示了三个图片元素;动画依次向左移动;三个图…...

软考架构师笔记-计算机网络
1.9 计算机网络 OSI/RM 七层模型 物理层 二进制传输(中继器、集线器) (typedef) 数据链路层 传送以帧为单位的信息(网桥、交换机、网卡) 网络层 分组传输和路由选择(三层交换机、路由器)ARP/RARP/IGMP/ICMP/IP 传输层 端到端的连接(TCP/UDP)在前向纠错系统中,当接…...

Spring MVC 页面重定向返回后通过nginx代理 丢失端口号问题处理
Spring MVC页面重定向通过Nginx代理后出现端口丢失问题,通常由以下原因及解决方案构成: ## 一、Nginx配置问题(核心原因) 1. Host头传递不完整 Nginx默认未将原始请求的端口信息传递给后端,导致应用生成重定向…...

道可云人工智能每日资讯|亚马逊云业务部门成立智能体人工智能团队
道可云元宇宙每日简报(2025年3月6日)讯,今日元宇宙新鲜事有: 《杭州市富阳区未来产业培育行动计划(2025-2026年)》发布 3月3日,杭州市富阳区经信局正式发布了《杭州市富阳区未来产业培育行动计划(2025-2026年)》&…...

算力100问☞第72问:算力与算法、数据的关系是什么?
目录 1、数据是基础 2、算法是核心 3、算力是保障 4、三者的关系 5、实际应用中的体现 算力、算法和数据是人工智能和计算机科学领域的三个核心要素,它们之间相互依赖、相互促进,共同构成了现代计算系统的基础。以下是它们之间的关系: 1、数据是基础 定义:数据是信息…...
AI-Ollama本地大语言模型运行框架与Ollama javascript接入
1.Ollama Ollama 是一个开源的大型语言模型(LLM)平台,旨在让用户能够轻松地在本地运行、管理和与大型语言模型进行交互。 Ollama 提供了一个简单的方式来加载和使用各种预训练的语言模型,支持文本生成、翻译、代码编写、问答等多种…...

Java开发的AI应用框架简述——LangChain4j、Spring AI、Agent-Flex
LangChain4j LangChain4j官网 star很多,文档齐全,在AI服务中,提供了丰富的功能,示例代码丰富。 简介 是一个功能丰富、易于使用的Java AI开发框架,特别适合需要快速集成和使用大型语言模型的Java开发者。 项目特点 …...

【算法day2】无重复字符的最长子串 两数之和
无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 https://leetcode.cn/problems/longest-substring-without-repeating-characters/ class Solution { public:int lengthOfLongestSubstring(string s) {int sub_length …...

HarmonyOS:基于hmrouter实现Page的生命周期监听
前言:在使用ArkTs语言写鸿蒙的App中,我们发现Page的生命周期函数,如下: 页面的生命周期(32) onPageShow:页面显示触发(页面特有) onPageHide:页面隐藏触发(页面特有) onBackPress:当用户点击返回按钮时…...

DeepSeek + 飞书多维表格搭建你的高效工作流
众所周知,大模型DeepSeek擅长于处理大规模语言模型推理任务,特别是在成本降低和思维链推理方面表现出色,我们一般把大模型必做我们的大脑,但是一个人不能只有大脑,还需要其他输入输出以及操作支配的眼耳鼻嘴手足等。…...

uniapp+<script setup lang=“ts“>使用 uni.$emit和uni.$on全局传递数据
注意: 在A页面直接使用 uni.$emit(changeCategoryKey, childCategory)传递,在B页面使用 uni.$on(changeCategoryKey, (val) > {console.log(val, 取值);});只在组件传递有效,页面跳转后是无效的 跳转页面使用的传递数据的方法如下&…...

综合使用pandas、numpy、matplotlib、seaborn库做数据分析、挖掘、可视化项目
目录 1.结构化数据挖掘 1.1依赖库导入和数据读取 1.2各品牌机型及售价统计 1.3视频录制规格与价格关联性分析 2.结构化数据预处理 2.1筛选特征 2.2特征标签归一化及编码 1.结构化数据挖掘 1.1依赖库导入和数据读取 导入必要的依赖库,读取 csv 格式数据集转化为 Data…...

docker中kibana启动后,通过浏览器访问,出现server is not ready yet
问题:当我在浏览器访问kibana时,浏览器给我报了server is not ready yet. 在网上试了很多方法,都未能解决,下面是我的方法: 查看kibana日志: docker logs -f kibana从控制台打印的日志可以发现ÿ…...

十、Redis 主从复制:原理解析、配置实践与优化策略
Redis 主从复制:原理解析、配置实践与优化策略 Redis 作为高性能的 NoSQL 数据库,主从复制(Master-Slave Replication) 是其核心特性之一。主从复制用于数据冗余、读负载分担、故障恢复,是 Redis 构建高可用架构的基础。本文将深入解析 Redis 主从复制的配置方法、复制机…...