如何将本地命名分支推送到远程仓库的指定异名分支?
直接推送本地分支到远程异名分支的Git解决方案
核心命令(不依赖当前仓库状态)
不管当前处于哪个本地分支,只要本地存在submission分支,直接执行这条命令就能将其推送到远程grader仓库的master分支:
git push grader submission:master
这条命令无需提前切换分支,也不用设置上游分支关联,从根源上避免了「fatal: the current branch submission has no upstream branch」这类依赖仓库状态的报错。
不同场景的简化操作
1. 初始推送(远程grader/master为空)
若还未创建本地submission分支,先完成分支创建和内容提交,再执行核心推送命令:
# 创建并切换到submission分支 git checkout -b submission # 提交本地修改 git add . git commit -m "初始提交" # 推送到远程grader的master分支 git push grader submission:master
2. 远程grader/master已有内容时的推送
如果远程分支已有内容,为避免推送冲突,可先拉取远程内容到本地临时分支,用ours策略合并(保留本地submission分支内容)后再推送:
# 拉取远程grader的master到本地临时分支 git fetch grader master:tmp-grader-master # 切换到本地submission分支 git checkout submission # 合并远程内容,保留本地分支的所有修改 git merge -m "合并远程分支,保留本地内容" --strategy=ours --allow-unrelated-histories tmp-grader-master # 执行核心推送命令 git push grader submission:master # 删除临时分支 git branch -D tmp-grader-master
3. 后续日常推送简化
学生完成代码修改提交后,无需执行冗余的状态检查命令,直接用核心推送命令即可;如需推送标签,单独执行标签推送命令:
# 提交修改 git commit -am "提交说明" # 推送submission到远程grader/master git push grader submission:master # 推送标签(如有需要) git tag xyzzy git push grader --tags
常见报错说明
- 「You are not allowed to push code to this project」:属于权限问题,需确认学生的Git账号已被授予
grader仓库的推送权限,与推送命令本身无关。 - 「fatal: the current branch submission has no upstream branch」:原脚本依赖上游分支关联设置,使用核心推送命令无需配置上游,因此不会触发该错误。
内容的提问来源于stack exchange,提问作者Jim Newton
相关产品推荐
相关产品推荐

