git实战(8)git高阶命令分析【结合使用场景】

以下是 Git 高阶命令分享,涵盖高效协作、历史重构、问题排查等场景,助你成为 Git 高手:

一、历史重构与清理

1. 交互式变基(改写历史)
git rebase -i HEAD~3  # 修改最近3次提交

操作选项:

  • reword:修改提交信息
  • edit:暂停修改提交内容
  • squash:合并到前一个提交
  • drop:删除提交

用途:合并琐碎提交、修改历史信息、清理无用提交。

2. 彻底删除历史文件(敏感信息清理)
git filter-repo --path <file> --invert-paths  # 从所有提交中删除文件

注意:需先安装 git-filter-repo(非内置命令),适用于清理密码、大文件等。


二、精准提交操作

1. 选择性提交(部分暂存)
git add -p  # 交互式选择代码块暂存
  • s 拆分代码块,y/n 决定是否暂存
  • 用途:将同一文件中的多个修改拆分成不同提交。
2. 拣选提交(移植特定提交)
git cherry-pick <commit_id>  # 将指定提交应用到当前分支
git cherry-pick -x <commit_id>  # 保留原提交信息(推荐)

场景:修复 Bug 时,将补丁从开发分支移植到生产分支。


三、高级撤销与修复

1. 引用日志(找回误删提交)
git reflog  # 查看所有 HEAD 变更记录
git reset --hard HEAD@{2}  # 恢复到 reflog 中的第2个状态

救急:找回 reset --hard 删除的提交或误删分支。

2. 修复提交(修改最后一次提交)
git commit --amend        # 修改最后一次提交信息
git commit --amend --no-edit  # 只修改提交内容(不改变信息)

技巧:先 git add 修改文件,再 amend 可避免产生新提交。


四、复杂合并与冲突处理

1. 三方合并(解决多分支冲突)
git merge -s recursive -Xours <branch>  # 冲突时优先保留当前分支代码
git merge -s recursive -Xtheirs <branch> # 冲突时优先保留目标分支代码

适用场景:批量处理大量冲突(如合并长期分支)。

2. 使用 rerere 自动解决重复冲突
git config --global rerere.enabled true  # 开启自动冲突记忆
  • 首次手动解决冲突后,Git 会记住方案,后续相同冲突自动解决。

五、深度排查与调试

1. 二分法定位问题提交
git bisect start          # 开始二分查找
git bisect bad            # 标记当前提交有问题
git bisect good <commit>  # 标记已知正常的提交
# Git 自动切到中间提交 → 测试后标记 good/bad → 最终定位问题提交
git bisect reset          # 结束查找
2. 追踪代码行历史
git blame -L 20,30 <file>  # 查看文件第20-30行的修改记录
git blame -C <file>        # 识别从其他文件移动来的代码

六、子模块管理(多仓库协作)

git submodule add <repo_url> <path>  # 添加子模块
git submodule update --init --recursive  # 初始化并更新子模块
git clone --recurse-submodules <repo_url>  # 克隆时包含子模块

用途:在项目中嵌套其他仓库(如公共组件库)。


七、高级配置与钩子

1. 自定义钩子(自动化操作)
# 在 .git/hooks/ 中创建可执行脚本
pre-commit    # 提交前检查代码规范
post-receive  # 推送到远程后触发部署

示例:用 pre-commit 钩子自动运行 ESLint 检查。

2. 配置别名(简化命令)
git config --global alias.st "status -s"
git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'"

用法git st 代替 git status -sgit lg 查看美观日志。


八、性能优化

1. 部分克隆(减少仓库体积)
git clone --filter=blob:none <repo_url>  # 不下载文件对象(仅需时拉取)

适用场景:大型仓库(如含大量二进制文件)。

2. 稀疏检出(只获取部分目录)
git clone --sparse <repo_url>
git sparse-checkout set dir1 dir2  # 指定需要检出的目录

九、危险操作(谨慎使用!)

1. 强制推送覆盖历史
git push --force-with-lease  # 比 --force 安全(检查远程是否被他人更新)

原则:仅限私有分支,公共分支需团队协商。

2. 彻底重置分支
git reset --hard <commit> && git push --force  # 丢弃所有后续提交

警告:会破坏协作分支,必须提前通知所有协作者!


十、高阶工作流

1. 补丁工作流(跨仓库提交)
git format-patch -1 <commit>  # 生成 .patch 文件
git am < patch_file           # 应用补丁

场景:给开源项目提交代码(邮件发送补丁)。

2. 多分支同步维护
# 将 hotfix 同时应用到多个分支
git rebase --onto main hotfix~5 hotfix  # 重构 hotfix 分支基线
git checkout feature
git rebase hotfix                      # 将 feature 分支基于新 hotfix

总结:高阶命令核心价值

命令核心作用
rebase -i历史重构(合并/修改/删除提交)
filter-repo彻底清理历史文件
bisect高效定位问题提交
cherry-pick -x精准移植提交
reflog找回误操作记录
submodule管理嵌套仓库
sparse-checkout部分检出大仓库

掌握这些命令后,你将能:

  • ✅ 优雅管理复杂历史
  • ✅ 高效解决团队协作问题
  • ✅ 精准控制代码变更
  • ✅ 深度优化仓库性能

最后忠告:高阶命令往往伴随风险,操作前务必:

  1. 备份重要分支
  2. 确认操作影响范围
  3. 团队协作时提前沟通!

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

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

相关文章

生成一个竖直放置的div,宽度是350px,上面是标题固定高度50px,下面是自适应高度的div,且有滚动条

<!-- 我要生成一个竖直放置的div&#xff0c;宽度是350px&#xff0c;上面是标题固定高度50px&#xff0c;下面是自适应高度的div&#xff0c;且有滚动条。 --><style>html,body{/* height:100vh; */margin:10px; padding:10px;} </style><div style"…

题解:P13754 【MX-X17-T3】Distraction_逆序对_前缀和_Ad-hoc_算法竞赛C++

Beginning 这道题思维难度很大&#xff0c;有两个难点其实都不好解决&#xff0c;但因为其代码太过弱智所以只是绿题。 本题解详细地分析了做题时的历程与思路&#xff0c;所以希望大家可以仔细地完整阅读。 Analysis 首先先大体观察一下题目的性质&#xff1a;nnn 是排列&…

Android Studio下载gradle文件很慢的捷径之路

小伙伴们是不是也经常遇到导入新的项目时&#xff0c;AS一直卡在gradle的下载中。下面介绍一种简单暴力的方式来处理这个问题。 首先我们到gradle的官网下载自己想要的gradle版本。我这里以gradle7.5为例。点击下载gradle-7.5-bin.zip的压缩包。下载完成后无需解压。直接到C:\U…

【C++】全局变量/静态变量的初始化时机

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、全局变量下断点调试1. int a 10; —— 不能卡住断点2. static int b; —— 不能卡住断点3. MyClass c; —— 可以卡住断点4. static MyClass d; —— 可以卡住断…

水体反光 + 遮挡难题破解!陌讯多模态融合算法在智慧水务的实测优化

一、智慧水务行业检测痛点&#xff08;数据支撑 场景难点&#xff09; 根据《2023 年中国智慧水务发展报告》&#xff0c;当前水务监控系统在核心业务场景中面临两大效率瓶颈&#xff0c;直接影响水厂运维与供水安全&#xff1a; 高误报率导致运维资源浪费&#xff1a;水厂沉…

C++的指针和引用:

目录 引用&#xff1a; 注意&#xff1a; 左值引用和右值引用&#xff1a; 左值引用&#xff1a; 右值引用&#xff1a; 指针&#xff1a; 指针与引用的区别&#xff1a; 引用&#xff1a; 在C中&#xff0c;‌引用‌是一种为已存在变量创建别名的机制&#xff0c;它允…

图像处理中的伪影

目录 一、块效应伪影 / 块状伪影 二、 去除块状伪影 三、振铃伪影 一、块效应伪影 / 块状伪影 块状伪影(Blocking Artefacts)是对经过变换编码的图像进行重建时&#xff0c;图像中可能会出现压缩过程产生的可见伪影。基于块的变换编码中&#xff0c;一种常见伪影是 “块效应…

Java:对象的浅拷贝与深拷贝

目录 一、概念 二、实现方式 2.1 浅拷贝&#xff08;不推荐&#xff09; 2.2 深拷贝 2.2.1 方法一&#xff1a;重写 clone() 方法并递归克隆&#xff08;常用&#xff09; 2.2.2 方法二&#xff1a;通过序列化实现&#xff08;更强大&#xff0c;但更重&#xff09; 2.2…

佰钧成 社招 一面

1. “评估需求、排期”的工作流程&#xff1f; “我的工作流程一般是这样的&#xff1a; 需求评审&#xff1a; 首先会和产品、后端同学一起过需求&#xff0c;确保我完全理解了业务背景和要实现的价值&#xff0c;而不仅仅是功能点。技术方案设计&#xff1a; 之后&#xff0c…

最短路径问题(图论)

1 Floyd 作用&#xff1a; 求图中所有顶点之间的最短路径&#xff0c;包括有向图或者无向图&#xff0c;权重正负皆可&#xff0c;用来一次性求所有点之间的最短路径。 思路是 通过逐步扩大中间层&#xff0c;使得最短路径不断被更新&#xff0c;直到中间层扩大到n位置&#…

2025年8月新算法—云漂移优化算法(Cloud Drift Optimization Algorithm, CDO)

1、简介 这项研究介绍了云漂移优化&#xff08;数位长&#xff09;算法&#xff0c;这是一种创新的自然启发的元启发式方法来解决复杂的优化问题。CDO模仿受大气力影响的云粒子的动态行为&#xff0c;在探索和利用之间取得了微妙的平衡。它具有自适应权重调整机制&#xff0c;可…

VS Code进行.NET开发时使用断点和热重载

VS Code 调试热重载 1. VS Code 设置 安装扩展&#xff1a;C#、C# Dev Kit设置中搜索hot reload&#xff0c;选择C#开发工具包&#xff0c;把下图的几项全部打勾2. 启动项目&#xff08;仅用左侧“运行和调试”&#xff09; 打开解决方案&#xff0c;选你的启动项目的“.NET La…

mysqlbinlog解析命令

解析 MySQL Binlog 详细信息的命令以下是解析 MySQL Binlog 详细信息的常用命令&#xff1a;1. 基本 binlog 解析命令# 查看 binlog 文件内容&#xff08;基本格式&#xff09; mysqlbinlog /var/lib/mysql/mysql-bin.000001# 查看特定时间段的 binlog mysqlbinlog --start-dat…

算法训练营day60 图论⑩ Bellman_ford 队列优化算法、判断负权回路、单源有限最短路(修改后版本)

增加对最短路径的优化算法、负权回路、单源有限最短的讲解 Bellman_ford 队列优化算法 -------------------------------------------------------------------------------- 8.24更新&#xff1a;该算法是针对带负值的最短路径的优化算法&#xff0c;核心通过队列来实现&…

Python 学习(十六) 下一代 Python 包管理工具:UV

目录1. UV 介绍1.1 什么是UV&#xff1f;1.2 UV的核心优势1.3 UV和其他工具对比1&#xff09;UV vs. pipvirtualenv2&#xff09;UV vs. Conda3&#xff09;UV vs. Poetry4&#xff09;功能对比表2. UV的安装与常用命令2.1 安装UV1&#xff09;使用官方安装脚本&#xff08;推荐…

Redis学习笔记 ----- 缓存

一、什么是缓存 缓存&#xff08;Cache&#xff09;是数据交换的缓冲区&#xff0c;是存储数据的临时地方&#xff0c;一般读写性能较高。 &#xff08;一&#xff09;缓存的作用 降低后端负载&#xff1a;减少对数据库等后端存储的直接访问压力。提高读写效率&#xff0c;降低…

React响应式链路

文章目录响应式链路的核心环节1.状态定义与初始化2.状态更新触发&#xff08;状态变更&#xff09;3.调度更新&#xff08;Scheduler&#xff09;4.重新渲染&#xff08;Render 阶段&#xff09;5.协调&#xff08;Reconciliation&#xff09;与 Fiber 架构6.提交更新&#xff…

软件设计师——计算机网络学习笔记

一、计算机网络 网络基础 1. 计算机网络的分类2. 网络拓扑结构 总线型(利用率低、干扰大、价格低) 星型(交换机形成的局域网、中央单元负荷大) 环型(流动方向固定、效率低扩充难) 树型(总线型的扩充、分级结构) 分布式(任意节点连接、管理难成本高)一般来说&#xff0c;办公室局…

1200 SCL学习笔记

一. IF. 如果。下面是一个起保停IF #I_start AND NOT #I_stop THEN //如果I_start接通 和 I_stop没有接通#Q_run : 1; //输出Q_run 接通 ELSIF #I_stop THEN //如果I_stop接通#Q_run : 0; //。。。。。。 END_IF;二. CASECASE…

单例模式与线程池

1. 单例模式单例模式是一种常用的设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。这种模式在需要控制资源访问、管理共享状态或协调系统行为时非常有用。单例模式的核心特点&#xff1a;私有构造函数&#xff1a;防止外部通过n…