文章目录1. 简介2. 格式3. 选项4. 示例4.1 基础用法4.2 推送并建立关联首次推送推荐4.3 推送到不同名称的远程分支4.4 删除远程分支4.5 强制推送谨慎使用4.6 推送所有分支和标签5. 注意5.1 首次推送必须建立关联5.2 强制推送的风险5.3 推送被拒绝的常见原因5.4 常用别名设置6. 小结参考文献1. 简介git push用于将本地仓库的提交推送到远程仓库。简单来说git push把你本地提交的代码上传到远程服务器如 GitHub、GitLab。# 基本对应关系gitpushgitpush origin HEAD# 将当前分支推送到远程的同名分支2. 格式gitpush[options][repository[refspec]]如果命令行没有repository指定推送的远程仓库则会采用branch.*.remote配置。如果缺少配置则默认为origin。如果命令行没有refspec指定引用规格取决于push.default配置。push.default值行为示例当前分支为mainsimple默认推送当前分支到远程同名分支且要求两者已关联git push origin maincurrent推送当前分支到远程同名分支不要求关联git push origin mainmatching推送所有有同名远程分支的本地分支推送main、dev、feature等upstream推送到当前分支的上游分支需已设置--set-upstream推送到已关联的远程分支nothing不推送任何东西必须显式指定必须写git push origin main3. 选项-d,--delete所有列出的引用都会从远程仓库中删除。这相当于将所有引用前加上冒号。 -u, --set-upstream 推送并建立本地分支与远程分支的关联之后可直接用gitpush -f,--force强制推送覆盖远程分支⚠️ 慎用 --force-with-lease 更安全的强制推送若远程分支有新提交则拒绝 --all,--branches推送所有本地分支即 refs/heads/ 下的 refs不能与其他refspec一起使用。--tags推送所有标签--delete删除远程分支 -v,--verbose显示详细信息 -n, --dry-run 模拟执行显示将要推送的内容但不实际推送4. 示例4.1 基础用法基础用法是最常见的推送场景适用于日常开发中的代码同步。# 将当前分支推送到 origin 的同名远程分支gitpush origin HEAD# 解释HEAD 指向当前检出的分支这个命令会将当前分支推送到远程的同名分支# 将本地 main 分支推送到远程 main 分支gitpush origin main# 解释明确指定本地分支和远程分支名称适合需要精确控制的场景使用场景日常开发完成后将本地提交推送到远程仓库团队协作时同步代码变更持续集成/持续部署流程中的代码推送注意事项确保远程仓库有对应的分支首次推送需要建立关联推送前建议先执行git pull拉取最新代码避免冲突如果远程分支有新的提交可能需要先合并或变基4.2 推送并建立关联首次推送推荐首次推送本地分支到远程时建立上游关联可以简化后续操作。# 推送并设置 upstream之后可直接用 git pushgitpush-u|--set-upstream origin main参数说明-u或--set-upstream设置上游分支关联origin远程仓库名称默认远程仓库main本地分支名称建立关联后的好处简化命令之后只需输入git push即可推送无需指定远程和分支自动跟踪Git 会记住这个关联关系状态显示git status会显示本地分支与远程分支的对比状态适用场景创建新分支后的首次推送从其他仓库克隆后创建新分支需要简化工作流程的日常开发4.3 推送到不同名称的远程分支有时需要将本地分支推送到远程的不同名称分支这在多环境部署或特定工作流中很有用。# 将本地 feature 分支推送到远程 dev 分支gitpush origin feature:dev语法解析feature:dev冒号前是本地分支冒号后是远程分支这个命令不会建立上游关联每次都需要完整命令使用场景环境部署将开发分支推送到测试环境分支代码审查将功能分支推送到特定的审查分支备份目的将本地分支推送到备份分支多团队协作不同团队使用不同的分支命名规范示例扩展# 将本地 develop 分支推送到远程 staging 分支gitpush origin develop:staging# 将本地 hotfix 分支推送到远程 production 分支gitpush origin hotfix:production4.4 删除远程分支清理不再需要的远程分支是仓库维护的重要部分。# 删除远程的 feature 分支gitpush origin-d|--deletefeature# 或使用更简洁的语法gitpush origin :feature如果误删了远程分支可以通过本地分支重新推送# 假设本地还有该分支gitpush origin feature4.5 强制推送谨慎使用强制推送会覆盖远程历史必须谨慎使用。# 强制覆盖远程分支⚠️ 会丢失远程上的提交gitpush--forceorigin main# 更安全的强制推送如果远程有新提交则拒绝gitpush --force-with-lease origin main4.6 推送所有分支和标签批量推送操作适用于特定场景。# 推送所有本地分支如果远程不存在对应分支会自动创建gitpush--allorigin# 推送所有标签谨慎使用可能包含临时标签gitpush--tags标签推送的最佳实践# 推送单个标签gitpush origin v1.0.0# 删除远程标签gitpush origin--deletetag v1.0.05. 注意5.1 首次推送必须建立关联# 首次推送设置 upstreamgitpush-uorigin main# 之后可以直接用gitpush5.2 强制推送的风险场景风险建议多人协作的公共分支⚠️ 会覆盖他人的提交禁止使用--force个人开发分支未共享✅ 可以可用--force-with-lease更安全重写历史如 rebase后必须使用--force先确认没有其他人基于此分支开发5.3 推送被拒绝的常见原因错误信息原因解决方法failed to push远程有新提交git pull --rebase后重新推送rejected权限不足检查仓库权限或 SSH Keyprotected branch分支受保护通过 Pull Request 合并5.4 常用别名设置gitconfig--globalalias.pupush -ugitconfig--globalalias.pfpush --force-with-lease# 使用别名gitpu origin maingitpf origin main6. 小结需求命令说明首次推送并建立关联git push -u origin main之后可直接用git push日常推送git push origin main推送到远程同名分支推送并变基后强制推送git push --force-with-lease origin main更安全的强制推送删除远程分支git push origin --delete feature删除远程分支推送所有分支git push --all origin推送所有本地分支模拟执行预览git push --dry-run origin main查看将要推送的内容一句话总结git push是分享代码的命令首次推送用-u建立关联。强制推送-f要极度谨慎优先使用--force-with-lease。推送前建议先用git pull --rebase同步远程更新避免推送被拒绝。**参考文献Git - git-push Documentation