name: push description: 全面的Git推送操作,包括基本推送、强制推送安全协议、标签推送、远程管理和故障排除。当推送提交、管理远程、推送标签、解决推送冲突、处理被拒绝的推送或处理强制推送场景时使用。涵盖推送策略、分支保护、上游配置和push --force-with-lease最佳实践。 allowed-tools: Read, Bash, Glob, Grep
Git推送
Git推送操作的全面指导,从基本推送到强制推送安全协议和远程管理。
概述
这个技能提供Git推送操作的完整指导,强调安全协议(特别是强制推送)、远程管理和常见推送场景的故障排除。它通过专注于推送操作和远程同步来补充git-commit技能(处理提交创建)。
使用时机
这个技能应在以下情况下使用:
- 推送提交 - 基本推送操作到远程仓库
- 强制推送 - 使用安全协议重写历史(force-with-lease)
- 推送标签 - 注释标签、轻量标签、标签工作流
- 管理远程 - 添加、删除、重命名、配置远程仓库
- 故障排除推送 - 被拒绝的推送、冲突、认证问题
- 上游配置 - 设置跟踪分支、push.autoSetupRemote
- 分支保护 - 理解受保护分支和推送限制
触发关键词: push, force push, force-with-lease, remote, upstream, tracking branch, rejected push, push --force, git push origin, push tags, remote add
先决条件
这个技能假设:
- Git已安装(通过
git --version验证) - 仓库已初始化(本地仓库有
.git/目录) - 远程已配置(通常是GitHub/GitLab/Bitbucket的
origin) - 基本Git知识(提交、分支、远程)
有关Git安装帮助,请参阅setup技能。
快速开始
基本推送
# 推送当前分支到远程(如果上游已配置)
git push
# 推送并设置上游用于首次推送
git push -u origin feature-branch
# 推送特定分支到远程
git push origin main
安全强制推送
# 安全强制推送(推荐 - 仅当没有其他人推送时覆盖)
git push --force-with-lease
# 最安全强制推送(推荐用于最大安全性)
git push --force-with-lease --force-if-includes
# 特定分支的force-with-lease
git push --force-with-lease origin feature-branch
推送标签
# 推送特定标签
git push origin v1.0.0
# 推送所有标签
git push --tags
# 推送提交 + 指向它们的注释标签
git push --follow-tags
核心能力
1. 基本推送操作
将本地提交推送到远程仓库进行协作和备份。
基本命令:
# 推送当前分支(上游必须已配置)
git push
# 推送并设置上游(首次推送)
git push -u origin feature-branch
# 推送特定分支
git push origin main
# 干运行(预览而不推送)
git push --dry-run
📖 详细配置: 参见references/push-configuration.md获取上游设置、推送策略和高级选项。
2. 强制推送安全协议
在必要时安全地重写远程历史(在变基、修改或压缩提交后)。
关键安全规则:
- ✅ 仅对功能分支进行强制推送(您的个人工作)
- ✅ 总是使用
--force-with-lease(而不是--force) - ❌ 切勿强制推送到main/master/develop(共享分支)
- ❌ 切勿在其他人正在处理同一分支时强制推送
安全强制推送命令:
# ✅ 安全:仅当自您上次获取以来没有其他人推送时覆盖
git push --force-with-lease
# ✅ 最安全:最大安全性与force-if-includes
git push --force-with-lease --force-if-includes
📖 全面安全指导: 参见references/force-push-safety.md获取详细安全协议、预推送检查清单、恢复程序和分支保护。
3. 标签推送
将版本标签推送到远程以用于发布和里程碑。
快速命令:
# 创建并推送注释标签(推荐用于发布)
git tag -a v1.0.0 -m "发布版本 1.0.0"
git push origin v1.0.0
# 推送所有标签
git push --tags
# 推送提交 + 注释标签(推荐)
git push --follow-tags
📖 完整标签工作流: 参见references/tag-pushing.md获取标签类型、策略、别名和最佳实践。
4. 远程管理
配置和管理远程仓库以进行推送/获取操作。
快速命令:
git remote -v # 列出远程
git remote add origin <url> # 添加远程
git remote set-url origin <url> # 更改URL
git remote rename origin upstream # 重命名远程
📖 详细远程管理: 参见references/remote-management.md获取配置、分叉工作流和凭证管理。
5. 故障排除推送问题
诊断和解决常见推送失败和冲突。
常见问题 - 快速修复:
# 被拒绝的推送(非快进)
git pull --rebase && git push
# 认证失败
ssh -T git@github.com # 测试SSH
git remote set-url origin git@github.com:username/repo.git
# 受保护分支
git switch -c feature-branch
git push -u origin feature-branch
📖 全面故障排除: 参见references/troubleshooting.md获取详细诊断和解决方案。
常见工作流
功能分支开发
git switch -c feature/user-auth
git commit -m "feat(auth): 实现认证"
git push -u origin feature/user-auth # 首次推送设置上游
git push # 后续推送
变基和强制推送
git fetch origin
git rebase origin/main
git push --force-with-lease # 安全强制推送
生产热修复
git switch main && git pull
git switch -c hotfix/critical-bug
git commit -m "fix: 解决关键错误"
git push -u origin hotfix/critical-bug
gh pr create --title "HOTFIX: ..."
📖 其他工作流: 参见references/workflows.md获取分叉贡献、发布标签和复杂多远程场景。
最佳实践
关键安全规则:
- ✅ 总是使用
--force-with-lease(而不是--force) - ✅ 切勿强制推送到main/master/develop
- ✅ 推送前验证无敏感数据
- ✅ 推送前运行测试(不推送损坏的代码)
推送频率:
- ✅ 每天推送以备份和协作
- ✅ 完成逻辑工作单元后推送
- ❌ 不推送损坏的代码或敏感数据
📖 全面最佳实践: 参见references/best-practices.md获取安全协议、安全、协作指南和高级场景。
参考资料
详细指南:
- references/push-configuration.md - 上游设置、推送策略、高级选项
- references/force-push-safety.md - 强制推送安全协议和恢复
- references/tag-pushing.md - 标签类型、策略和工作流
- references/remote-management.md - 远程配置和分叉工作流
- references/troubleshooting.md - 推送问题诊断和解决方案
- references/workflows.md - 常见工作流模式
- references/best-practices.md - 安全、安全和协作
相关技能:
- git-commit - 提交创建、提交消息、PR工作流
- config - Git配置、别名、凭证管理
- line-endings - .gitattributes, Git LFS设置
测试场景
场景1:基本功能分支推送
查询: “我在我的功能分支上做了一些提交。如何将它们推送到远程?”
预期行为:
- 技能在“push”、“feature branch”、“commits”、“remote”上激活
- 提供带上游设置的基本推送命令
- 解释-u标志用于首次推送
场景2:变基后强制推送
查询: “我将我的功能分支变基到main上。现在推送被拒绝。我该怎么办?”
预期行为:
- 技能在“rebase”、“push”、“rejected”上激活
- 解释为什么推送被拒绝(历史重写)
- 推荐
git push --force-with-lease并附安全解释 - 提供预强制推送检查清单
场景3:发布推送标签
查询: “如何将我的v1.0.0标签推送到GitHub?”
预期行为:
- 技能在“push”、“tag”、“v1.0.0”、“release”上激活
- 提供特定标签推送命令
- 解释推送单个标签与所有标签的区别
场景4:由于远程更改被拒绝的推送
查询: “我的推送被拒绝,并显示关于非快进的消息。这是什么意思?”
预期行为:
- 技能在“push”、“rejected”、“non-fast-forward”上激活
- 解释原因(有人先推送了)
- 提供解决方案选项(fetch+merge、fetch+rebase、pull --rebase)
场景5:管理多个远程
查询: “我分叉了一个仓库。如何推送到我的分叉但从原始拉取?”
预期行为:
- 技能在“fork”、“push”、“pull”、“remote”上激活
- 解释带上游远程的分叉工作流
- 提供添加上游远程的命令
多模型测试笔记
测试于:
-
Claude Sonnet 4.5: ✅ 已验证 - 技能在所有触发关键词上正确激活,提供全面的推送指导,有效处理强制推送安全协议。渐进式披露与按需加载参考文件效果良好。
-
Claude Haiku 3.7: 🔄 待测试 - 需要验证:(1) 技能激活可靠性,(2) 强制推送安全指导清晰度,(3) 渐进式披露有效性。
-
Claude Opus 3.7: 🔄 待测试 - 需要验证:(1) 技能激活,(2) 故障排除指导深度,(3) 参考文件加载行为。
观察:
- 强触发关键词(“push”、“force push”、“remote”、“tag”、“rejected”、“upstream”)在各种模型上效果良好
- 强制推送安全协议清晰阐述,带有视觉警告
- 实现渐进式披露:主文件减少到约400行,详细内容在references/
最后更新: 2025-11-28
版本历史
- v1.0.0 (2025-12-26):初始发布
审计状态: ✅ 通过(A型标准技能) 内容验证: 所有技术声明通过MCP服务器针对git-scm.com、Perplexity、Microsoft Learn验证