• [问题求助] Git撤销命令revert与reset区别?
    Git撤销命令revert与reset区别?
  • [问题求助] Git Revert特定文件/路径的实现方法
    Git Revert特定文件/路径的实现方法
  • [问题求助] 使用Git怎么实现revert?
    使用Git怎么实现revert?
  • [问题求助] 使用 Git 进行协作开发时,“拒绝推送(push rejected)” 怎么解决
    在使用 Git 进行协作开发时,“拒绝推送(push rejected)” 怎么解决
  • [问题求助] 使用SSH协议解决Git推送失败
    遇到 Git 推送失败的问题,尤其是在初次配置远程仓库或网络环境受限的情况下,
  • [问题求助] git如何回退已提交的代码中的指定文件,有几种方法
    git如何回退已提交的代码中的指定文件,有几种方法
  • [问题求助] Git Push失败:HTTP 413 Request Entity Too Large
    Git Push失败:HTTP 413 Request Entity Too Large
  • [技术干货] 一月技术干货合集来啦
    1、 使用Git实现revert的完整操作步骤【转载】cid:link_02、C++中new关键字用法示例详解【转载】cid:link_13、在C# WinForm项目中跨.cs文件传值的六种常用方案【转载】cid:link_24、 一文带你搞懂Java中Error和Exception的区别【转载】cid:link_35、 Java中实现Word和TXT之间互相转换的实用教程【转载】cid:link_46、MyBatis-Plus 默认不更新null的4种方法【转载】cid:link_57、SpringBoot接口防抖的5种高效方案【转载】cid:link_68、 Java中锁分类及在什么场景下使用【转载】cid:link_79、 Java中锁的全面解析之类型、使用场景、优缺点及实现方式(示例代码【转载】cid:link_810、 Caffeine结合Redis空值缓存实现多级缓存【转载】cid:link_911、在PostgreSQL中优雅高效地进行全文检索的完整过程【转载】cid:link_1012、MySQL CDC原理解析及实现方案【转载】cid:link_1113、 PostgreSQL优雅的进行递归查询的实战指南【转载】cid:link_1214、Redis 常用命令之基础、进阶与场景化实战案例【转载】https://bbs.huaweicloud.com/forum/thread-0212720487861500817-1-1.html15、Git中忽略文件机制的.gitignore与.git/info/exclude两种方式详解【转载】https://bbs.huaweicloud.com/forum/thread-0212720487688092711-1-1.html
  • [技术干货] 使用Git实现revert的完整操作步骤【转载】
    一、git revert核心概念git revert 是最安全的代码回退方式,它不会删除/修改历史提交记录,而是生成一个新的提交,用这个新提交来“抵消”目标提交的所有修改。这种方式适合:已推送到远程仓库的代码(避免修改公共历史)需要保留回退痕迹、便于追溯的场景团队协作中回退代码(不影响他人工作)二、git revert完整操作步骤(以你的机械臂场景为例)步骤 1:查看提交历史,找到要撤销的 Commit ID先通过日志找到需要撤销的目标提交的哈希值(前7位即可):12345# 查看简洁的提交历史(推荐)git log --oneline # 查看详细的提交历史(包含作者、时间、完整Commit ID)git log示例输出(--oneline 模式):123a87b9c0 (HEAD -> main) 优化机械臂J3角度判断逻辑5d6e7f8 初始化机械臂笛卡尔坐标获取9b8a7s6 新增手型切换基础逻辑假设你要撤销的是 a87b9c0 这个“优化J3角度判断”的提交。步骤 2:执行git revert撤销目标提交基础用法(撤销单个提交)12# 撤销指定Commit ID的提交,会自动打开提交信息编辑器git revert a87b9c0执行后 Git 会自动生成一个默认的 revert 提交信息(比如 Revert "优化机械臂J3角度判断逻辑"),你可以按之前讲的规范修改(补充原因、关联工单等),修改完成后:按 Esc 退出编辑模式输入 :wq 保存并退出(vim编辑器操作)快速提交(无需打开编辑器)如果不想手动编辑提交信息,可直接用 -m 参数指定信息:1234git revert a87b9c0 -m "revert: 撤销机械臂J3角度判断逻辑的修改 (#123) 原因:J3角度范围判断覆盖不全,导致手型误判撤销的提交ID:a87b9c0"步骤 3:处理 revert 过程中的冲突(常见场景)如果目标提交的修改和当前代码有冲突(比如你在撤销前又改了同一行代码),Git 会提示冲突,此时:查看冲突文件:1git status冲突文件会被标记为 both modified。打开冲突文件,手动解决冲突:冲突处会显示如下格式,你需要保留正确的代码,删除冲突标记:1234567<<<<<<< HEAD# 当前分支的代码elbow_x = shoulder_x + 10  # 现有逻辑=======# 被撤销提交的代码elbow_x = shoulder_x + 5   # 要撤销的逻辑>>>>>>> a87b9c0 (优化机械臂J3角度判断逻辑)解决冲突后,标记文件为已解决,并完成 revert:1234# 标记冲突文件已解决git add 冲突文件名.py# 完成 revert 提交git revert --continue如果想放弃这次 revert,执行:1git revert --abort步骤 4:推送 revert 提交到远程仓库撤销完成后,将新生成的 revert 提交推送到远程(比如 main 分支):1git push origin main三、进阶场景:撤销多个提交/合并提交1. 撤销连续的多个提交比如要撤销 a87b9c0 到 9b8a7s6 之间的所有提交(注意顺序:旧提交在前,新提交在后):1git revert 9b8a7s6..a87b9c02. 撤销合并提交(需指定父节点)如果要撤销的是合并分支的提交,需要加 -m 参数指定父节点(通常用 1 表示主分支):12# 撤销合并提交(Commit ID为合并提交的ID)git revert 合并提交ID -m 1四、git revertvsgit reset(新手必区分)特性git revertgit reset历史记录保留所有提交(新增revert提交)删除指定提交后的所有记录适用场景已推送的远程代码本地未推送的代码团队协作安全(不影响他人)危险(会覆盖远程历史)可追溯性强(能看到撤销过程)弱(历史记录被删除)总结git revert 是安全的回退方式,核心是生成新提交抵消旧修改,适合已推送的代码。核心操作流程:查看Commit ID → 执行git revert → 处理冲突(如有)→ 推送远程。提交信息要包含「操作类型+撤销原因+目标Commit ID」,便于团队追溯。
  • [技术干货] Git中忽略文件机制的.gitignore与.git/info/exclude两种方式详解【转载】
    一、Git 忽略机制概述Git 的忽略功能基于模式匹配规则(Pattern Matching),通过指定文件路径或通配符,告诉 Git 哪些文件不应被视为“待跟踪”或“待提交”的对象。这些规则不会影响已经 tracked(已纳入版本控制)的文件,仅对 untracked files(未跟踪文件)生效。Git 支持多层级的忽略配置,按优先级从低到高依次为:系统级忽略(通过 core.excludesFile 配置)仓库级忽略(项目根目录或子目录中的 .gitignore 文件)本地仓库私有忽略(.git/info/exclude)命令行临时忽略(如 git add -f 强制添加)其中,.gitignore 和 .git/info/exclude 是开发者最常接触的两种方式,也是本文的核心讨论对象。二、.gitignore:项目级共享忽略规则2.1 定义与位置.gitignore 是一个普通文本文件,通常位于 Git 仓库的根目录下,也可以存在于任意子目录中。其作用范围为该文件所在目录及其所有子目录。例如:my-project/├── .gitignore          ← 作用于整个项目├── src/│   └── .gitignore      ← 仅作用于 src/ 及其子目录└── docs/2.2 核心特性特性说明是否被 Git 跟踪是。.gitignore 本身可以(且通常应该)被提交到仓库作用范围整个仓库(或子目录),对所有克隆该仓库的协作者生效共享性团队共享。一旦提交,所有协作者都会继承相同的忽略规则持久性持久存在于项目历史中,随代码一起演进2.3 语法规范(简要).gitignore 使用标准的 Git 忽略语法,支持:通配符:*, ?, [...]目录匹配:以 / 结尾表示目录(如 build/)否定规则:以 ! 开头(如 !important.log 表示不忽略该文件)注释:以 # 开头空行:被忽略示例:123456789101112131415# 编译输出/target//build/*.class*.o # 日志文件*.log # IDE 配置(根据团队约定决定是否忽略).idea/*.iml # 但保留特定配置!.idea/runConfigurations/2.4 适用场景应使用 .gitignore 的情况:文件是构建产物(如 node_modules/, dist/, out/, target/)文件是通用开发工具生成的元数据(如 .vscode/, .idea/ —— 若团队约定不提交)文件是操作系统或编辑器生成的临时文件(如 .DS_Store, Thumbs.db, *.swp)文件是敏感信息模板(如 config.example.yaml,而非真实配置)忽略规则具有普适性和长期性,适用于所有开发者最佳实践:将 .gitignore 视为项目文档的一部分,确保其内容清晰、准确、可维护。三、.git/info/exclude:本地私有忽略规则3.1 定义与位置.git/info/exclude 是 Git 仓库内部的一个特殊文件,位于:1<repo-root>/.git/info/exclude注意:.git 是隐藏目录,该文件不会被 Git 跟踪,也不会出现在工作区文件列表中。3.2 核心特性特性说明是否被 Git 跟踪否。该文件属于 Git 内部元数据,永远不会被提交作用范围仅限当前本地仓库(Local Repository)共享性完全私有。其他协作者无法感知或继承这些规则持久性仅在当前克隆副本中有效;若重新克隆仓库,规则将丢失3.3 语法规范语法与 .gitignore 完全一致,支持相同的通配符、否定规则、注释等。示例:1234567# 仅我本地需要忽略my-debug-notes.txttemp-data/local-config.json # 临时实验文件experiment-*.py3.4 适用场景应使用 .git/info/exclude 的情况:文件是你个人临时创建的(如调试脚本、笔记、草稿)文件是你本地 IDE 的个性化配置(如你修改了 .idea/workspace.xml,但不想影响团队)你在进行短期实验或测试,生成了大量临时文件你希望避免污染项目的 .gitignore(例如某个忽略规则只对你有意义)你正在处理一个你不具备写权限的开源项目,但仍想本地忽略某些文件注意:如果你频繁使用 .git/info/exclude,可能意味着你的工作流存在可优化空间(如使用更规范的临时目录)。四、区别对比表维度.gitignore.git/info/exclude文件位置项目工作区(如 ./.gitignore)Git 内部(./.git/info/exclude)是否被 Git 跟踪是(可提交)否(永不提交)作用范围项目级(可递归子目录)本地仓库级(全局于该仓库)共享性团队共享仅本地私有持久性随项目历史持久存在仅在当前克隆中有效适用对象所有协作者仅当前开发者典型用途构建产物、通用工具文件个人临时文件、本地配置IDE 支持所有 Git 客户端均支持大多数客户端支持(包括 IDEA)五、常见误区与注意事项5.1 误区一:“加了忽略就能删除已跟踪的文件”错误:如果一个文件已经被 Git 跟踪(即曾经被 git add 并提交过),那么即使你将其加入 .gitignore 或 exclude,Git 仍然会继续跟踪它。正确做法:12345# 停止跟踪但保留本地文件git rm --cached <file> # 或停止跟踪整个目录git rm -r --cached <directory>之后再添加忽略规则才生效。5.2 误区二:“.gitignore可以忽略所有文件”错误:.gitignore 仅对 untracked files 有效。对于已跟踪文件、已暂存文件、已提交文件,忽略规则无效。5.3 优先级问题Git 在判断是否忽略一个文件时,会按以下顺序应用规则(后定义的规则优先级更高):全局忽略(core.excludesFile)项目 .gitignore.git/info/exclude命令行强制操作(如 git add -f)因此,.git/info/exclude 可以覆盖 .gitignore 中的规则(通过否定或更具体的匹配)。5.4 子目录.gitignore的作用域子目录中的 .gitignore 仅影响该目录及子目录,不会影响父目录或其他分支目录。这是实现模块化忽略的有效手段。六、JetBrains IDEA 中的操作建议在 IntelliJ IDEA 的 Git Commit 窗口中:若你希望团队所有人都忽略该文件 → 选择 “Add to .gitignore”若你仅希望自己本地忽略,且不希望影响项目配置 → 选择 “Add to .git/info/exclude”小技巧:你可以通过 View → Tool Windows → Project 显示隐藏文件,手动编辑 .gitignore;而 .git/info/exclude 需要通过终端或文件管理器访问。七、扩展:全局忽略(Global Ignore)除了上述两种方式,Git 还支持全局忽略文件,适用于所有本地仓库:123456# 设置全局忽略文件路径git config --global core.excludesFile ~/.gitignore_global # 编辑 ~/.gitignore_globalecho ".DS_Store" >> ~/.gitignore_globalecho "Thumbs.db" >> ~/.gitignore_global这适合放置操作系统级或个人偏好的通用忽略项。但 IDEA 的右键菜单通常不提供此选项。八、最佳实践场景推荐方式团队通用的构建产物、日志、临时文件.gitignore开源项目标准忽略(如 GitHub 提供的模板).gitignore个人临时文件、调试输出.git/info/exclude本地 IDE 配置(不确定是否共享)谨慎评估:若团队无统一规范,可用 .git/info/exclude敏感配置文件(如数据库密码)不应提交,也不应放在 .gitignore 中暴露路径;应使用环境变量或外部配置管理最佳实践项目初始化时就创建 .gitignore,参考 github/gitignore 模板。定期审查 .gitignore,避免过度忽略或遗漏关键文件。不要将个人临时文件规则加入 .gitignore,以免污染项目配置。对于已跟踪文件,先 git rm --cached 再加忽略。团队应就 IDE 配置文件的处理达成一致(如是否提交 .idea/ 的部分子目录)。
  • [技术干货] 在Git中添加子模块(submodule)的详细步骤【转载】
    在 Git 中添加子模块(submodule)的详细步骤如下:1. 添加子模块命令格式:1git submodule add <仓库URL> [目标路径]仓库URL:子模块的 Git 仓库地址(HTTP/SSH 均可)。目标路径(可选):子模块在主仓库中的存放路径。若省略,默认使用仓库名称作为路径。示例:1git submodule add https://github.com/example/thirdparty.git libs/thirdparty将 thirdparty 仓库添加到主仓库的 libs/thirdparty 目录下。执行后效果:克隆子模块仓库到指定路径。在主仓库根目录生成 .gitmodules 文件,记录子模块信息(URL 和路径)。在 .git/modules/ 目录下保存子模块的 Git 元数据。2. 提交主仓库的变更子模块添加后,主仓库会生成两个变更:.gitmodules 文件(新增)。子模块路径对应的提交 ID(类似 160000 模式的文件)。提交命令:1git commit -m "添加子模块: thirdparty"3. 克隆含子模块的主仓库其他协作者克隆主仓库后,需初始化子模块:方式一:递归克隆(推荐)1git clone --recurse-submodules <主仓库URL>一次性克隆主仓库并初始化所有子模块。方式二:分步初始化克隆主仓库:1git clone <主仓库URL>初始化子模块:1git submodule init拉取子模块代码:1git submodule update4. 更新子模块拉取子模块的最新代码进入子模块目录:1cd libs/thirdparty拉取更新并切换至最新提交:12git checkout main  # 切换到目标分支git pull返回主仓库目录,提交子模块的变更:123cd ../..git add libs/thirdpartygit commit -m "更新子模块 thirdparty 到最新版本"批量更新所有子模块1git submodule foreach git pull5. 删除子模块删除子模块条目:1git rm -f libs/thirdpackage删除 .git/modules/thirdparty 目录(手动操作):1rm -rf .git/modules/libs/thirdpackage提交变更:1git commit -m "移除子模块 thirdpackage"注意事项路径冲突:确保目标路径为空,否则会报错 '<路径>' already exists。子模块独立性:子模块的修改需在子模块目录内单独提交,主仓库仅记录其提交 ID。分支跟踪:默认子模块处于“游离 HEAD”状态,如需跟踪分支,需手动切换:12cd libs/thirdpartygit checkout main通过以上步骤,你可以将外部仓库作为子模块嵌入主项目,并管理其版本和更新。
  • [技术干货] Git仓库瘦身之彻底清理历史大文件与冗余目录的实战指南【转载】
    一、仓库臃肿原因分析Git 仓库体积过大,核心原因通常包括:提交了图片、GIF、字体文件、动态库(.so/.dll)等二进制资源,这类文件压缩效率低,且会保留完整历史版本;冗余目录未及时清理,包含大量非代码文件(配置、日志、缓存等);已删除的大文件仍残留于 Git 历史中,未彻底移除。通过 du -sh .git 命令可快速查看版本库体积,若超过 10MB 且无特殊需求,通常需要进行瘦身优化。二、核心工具与前置准备1. 关键工具Git 原生命令:用于排查文件、清理冗余对象;BFG Repo-Cleaner:高效删除 Git 历史中的指定文件 / 目录,比原生 git filter-branch 更快更简洁(需 Java 运行环境)。2. 工具安装(Linux/Mac)12# 下载 BFG 工具(单文件 Jar 包,无需复杂安装)curl -O https://repo1.maven.org/maven2/com/madgag/bfg/1.14.0/bfg-1.14.0.jar3. 重要前置操作瘦身前务必备份仓库,避免误操作导致数据丢失:12# 复制仓库到备份目录cp -r 你的仓库目录 你的仓库目录_备份三、仓库瘦身完整步骤1. 排查大文件与冗余目录首先定位仓库中占用空间较大的文件及目录,明确清理目标:12# 查看 Git 历史中最大的 10 个对象(含文件路径)git rev-list --objects --all | grep -f <(git verify-pack -v .git/objects/pack/*.idx 2>/dev/null | sort -k 3 -n | tail -10 | awk '{print $1}')通过该命令可筛选出历史中残留的大文件及所在目录,作为后续清理的重点目标。2. 批量清理目标文件 / 目录根据排查结果,分场景进行精准清理,优先删除整个冗余目录(效率更高)。场景 1:删除整个冗余目录(推荐)若某目录下无重要代码(如全是资源文件、废弃模块),直接删除整个目录及历史记录:12# 一键删除指定目录(递归清理所有子文件和历史)java -jar bfg-1.14.0.jar --delete-folders "冗余目录名" 你的仓库目录场景 2:删除指定类型大文件若需保留目录仅删除特定类型文件(如图片、字体、二进制库),按文件类型批量删除:12345# 删除所有图片文件java -jar bfg-1.14.0.jar --delete-files "*.{png,jpg,gif}" 你的仓库目录 # 删除所有字体文件和动态库java -jar bfg-1.14.0.jar --delete-files "*.{ttf,otf,so,dll}" 你的仓库目录3. 彻底清理 Git 残留对象删除历史文件后,Git 会保留无用对象,需执行垃圾回收彻底清理:1234567cd 你的仓库目录 # 清空本地操作日志,标记无用对象git reflog expire --expire=now --all # 深度垃圾回收,删除无用对象并优化压缩git gc --prune=now --aggressive4. 验证清理效果清理后需确认大文件已彻底移除,仓库体积符合预期:12345# 再次排查最大对象,无冗余文件输出即成功git rev-list --objects --all | grep -f <(git verify-pack -v .git/objects/pack/*.idx 2>/dev/null | sort -k 3 -n | tail -10 | awk '{print $1}') # 查看 .git 目录大小,验证瘦身效果du -sh .git正常情况下,仓库体积会从几十 MB 降至 1-2 MB(纯代码仓库水平)。5. 远程仓库同步本地清理完成后,需强制推送更新到远程仓库,替换远程的臃肿历史(仅仓库独占或已通知协作成员时操作):12345# 安全强制推送(避免远程新增提交误覆盖)git push --force-with-lease origin 你的分支名 # 若提示 stale info 报错,直接强制覆盖(确认无他人协作时)git push -f origin 你的分支名四、长期防护:避免仓库再次臃肿1. 完善 .gitignore 配置在仓库根目录的 .gitignore 文件中添加规则,禁止跟踪非代码文件:12345678910# 编辑 .gitignore,添加以下内容# 资源文件*.png *.jpg *.gif *.jpeg*.ttf *.otf *.woff# 二进制文件*.so *.dll *.dylib *.jar# 冗余目录资源目录名/ 日志目录名/ 缓存目录名/# 其他无用文件*.log *.tmp *.cache *.json2. 制定提交规范禁止直接提交大于 5MB 的文件;资源文件(图片、视频等)通过 CDN 或对象存储服务托管,不纳入 Git 版本控制;定期(3-6 个月)执行 git gc --aggressive,优化仓库体积。五、常见问题排查1. 推送失败(stale info 报错)原因:本地跟踪的远程信息过期,解决方式:12# 无需拉取,直接强制推送覆盖git push -f origin 你的分支名2. 清理后仓库体积反弹原因:远程仍保留臃肿历史,拉取时重新同步,解决方式:先强制推送本地干净历史到远程;后续拉取前先查看远程提交记录,确认无冗余历史后再操作。3. BFG 执行报错(路径相关)原因:--delete-files 参数仅支持文件名,不支持完整路径,解决方式:按文件名批量删除,或用 --delete-folders 按目录删除;示例:java -jar bfg-1.14.0.jar --delete-files "目标文件名" 仓库目录。六、总结Git 仓库瘦身的核心是「彻底清理历史大文件 + 禁止后续误提交」,通过 BFG 工具可高效移除冗余内容,配合 Git 垃圾回收和远程强制推送,能快速将臃肿仓库恢复轻量化状态。后续通过规范提交行为和完善 .gitignore 配置,可长期保持仓库精简,提升开发协作效率。
  • [技术干货] 在Git中添加子模块(submodule)的详细步骤【转载】
    在 Git 中添加子模块(submodule)的详细步骤如下:1. 添加子模块命令格式:1git submodule add <仓库URL> [目标路径]仓库URL:子模块的 Git 仓库地址(HTTP/SSH 均可)。目标路径(可选):子模块在主仓库中的存放路径。若省略,默认使用仓库名称作为路径。示例:1git submodule add https://github.com/example/thirdparty.git libs/thirdparty将 thirdparty 仓库添加到主仓库的 libs/thirdparty 目录下。执行后效果:克隆子模块仓库到指定路径。在主仓库根目录生成 .gitmodules 文件,记录子模块信息(URL 和路径)。在 .git/modules/ 目录下保存子模块的 Git 元数据。2. 提交主仓库的变更子模块添加后,主仓库会生成两个变更:.gitmodules 文件(新增)。子模块路径对应的提交 ID(类似 160000 模式的文件)。提交命令:1git commit -m "添加子模块: thirdparty"3. 克隆含子模块的主仓库其他协作者克隆主仓库后,需初始化子模块:方式一:递归克隆(推荐)1git clone --recurse-submodules <主仓库URL>一次性克隆主仓库并初始化所有子模块。方式二:分步初始化克隆主仓库:1git clone <主仓库URL>初始化子模块:1git submodule init拉取子模块代码:1git submodule update4. 更新子模块拉取子模块的最新代码进入子模块目录:1cd libs/thirdparty拉取更新并切换至最新提交:12git checkout main  # 切换到目标分支git pull返回主仓库目录,提交子模块的变更:123cd ../..git add libs/thirdpartygit commit -m "更新子模块 thirdparty 到最新版本"批量更新所有子模块1git submodule foreach git pull 5. 删除子模块删除子模块条目:1git rm -f libs/thirdpackage删除 .git/modules/thirdparty 目录(手动操作):1rm -rf .git/modules/libs/thirdpackage提交变更:1git commit -m "移除子模块 thirdpackage"注意事项路径冲突:确保目标路径为空,否则会报错 '<路径>' already exists。子模块独立性:子模块的修改需在子模块目录内单独提交,主仓库仅记录其提交 ID。分支跟踪:默认子模块处于“游离 HEAD”状态,如需跟踪分支,需手动切换:12cd libs/thirdpartygit checkout main通过以上步骤,你可以将外部仓库作为子模块嵌入主项目,并管理其版本和更新。
  • [技术干货] git branch如何delete方式【转载】
    在 Git 中删除分支(包括本地分支和远程分支)可以通过以下命令实现:1. 删除本地分支12git branch -d <branch-name>      # 安全删除(检查是否已合并)git branch -D <branch-name>      # 强制删除(未合并也会删除)示例:12git branch -d feature/login    # 删除已合并的 feature/login 分支git branch -D hotfix/bug       # 强制删除未合并的 hotfix/bug 分支注意:-d 会检查分支是否已合并到当前分支,未合并则拒绝删除。-D 强制删除,即使分支未合并(慎用)。2. 删除远程分支12git push origin --delete <branch-name>   # 标准写法git push origin :<branch-name>           # 旧式写法(等效)示例:1git push origin --delete feature/login  # 删除远程的 feature/login 分支注意:需要本地有权限操作远程仓库(如 GitHub/GitLab 的推送权限)。3. 批量删除分支删除所有已合并到当前分支的本地分支(保留main/master/develop)1git branch --merged | grep -vE "main|master|develop" | xargs git branch -d作用:git branch --merged 列出已合并的分支。grep -vE 排除保留的分支(如 main)。xargs git branch -d 删除剩余分支。删除所有匹配名称的远程分支(如清理fix/前缀分支)1git branch -r | grep 'origin/fix/' | sed 's/origin\///' | xargs -I {} git push origin --delete {}4. 常见问题问题 1:删除分支时报错 “not fully merged”原因:分支未合并到当前分支,但代码可能已通过其他方式合并(如 PR)。解决:使用 -D 强制删除:1git branch -D <branch-name>问题 2:远程分支已删除,但本地仍能看到原因:本地缓存了远程分支信息。解决:同步远程分支状态:1git fetch -p  # -p 或 --prune 清理本地缓存的已删除远程分支操作总结场景命令安全删除本地分支git branch -d <branch-name>强制删除本地分支git branch -D <branch-name>删除远程分支git push origin --delete <branch-name>清理已合并的本地分支git branch --merged | grep -vE "main|master" | xargs git branch -d同步远程分支状态git fetch -p注意事项删除前确认分支内容:使用 git log <branch-name> 或 git show <branch-name> 检查分支提交。协作分支谨慎删除:确保其他成员不再需要该分支(如通过团队沟通)。恢复误删分支:如果误删未合并的分支,可通过 git reflog 找到提交哈希并重建分支。
  • [技术干货] git删除分支实现步骤【转载】
    在 Git 中删除分支分为本地分支删除和远程分支删除两种情况,操作方法不同。以下是具体步骤:一、删除本地分支1.查看当前分支列表确认要删除的分支名称:1git branch2.切换到其他分支删除前需切换到其他分支(如 main 或 master):1git checkout main  # 切换到 main 分支3.删除本地分支安全删除(确保分支已合并到当前分支):1git branch -d <branch-name>示例:删除名为 feature/test 的分支:1git branch -d feature/test强制删除(未合并的分支也会被删除,需谨慎):1git branch -D <branch-name>二、删除远程分支1.查看远程分支列表1git branch -r  # 查看远程分支2.删除远程分支1git push origin --delete <branch-name>示例:删除远程分支 feature/test:1git push origin --delete feature/test等效语法(旧版本 Git):1git push origin :<branch-name>  # 冒号前为空表示删除三、同步本地与远程分支状态删除远程分支后,本地仍可能保留已删除分支的记录。可使用以下命令清理:1git fetch --prune  # 清除本地过时的远程分支引用四、常见问题无法删除当前分支必须先切换到其他分支才能删除当前分支:12git checkout maingit branch -d <branch-name>删除未合并的分支如果分支未合并到当前分支,git branch -d 会拒绝删除。使用 -D 强制删除:1git branch -D <branch-name>远程分支删除后仍显示使用 git fetch --prune 刷新本地缓存。总结删除本地分支:git branch -d <branch-name>(安全)或 -D(强制)删除远程分支:git push origin --delete <branch-name>清理本地缓存:git fetch --prune根据实际需求选择合适的命令,避免误删重要分支。