从主仓库克隆与从Fork仓库克隆有区别吗?推送代码被拒绝如何处理?
主仓库克隆与Fork仓库克隆的差异
- 默认远端绑定不同:从主仓库执行克隆操作后,本地仓库的默认远端
origin会绑定到原项目主仓库,普通贡献者默认不具备该仓库的直接写入权限;从个人Fork仓库克隆后,本地仓库的默认远端origin会绑定到你个人账号下的Fork副本,你对该副本拥有完整的读写权限。 - 后续贡献流程不同:从主仓库克隆的仓库无法直接推送修改到远端,需要额外配置个人Fork作为推送远端,修改先提交到个人Fork后再向主仓库提交合并申请;从Fork仓库克隆的本地副本可以直接推送修改到个人远端仓库,再向主仓库提交合并申请。
推送访问被拒绝的问题原因
你从主仓库克隆的本地仓库,默认绑定的推送远端是原项目主仓库,你作为外部贡献者没有直接写入主仓库的权限,因此直接执行git push操作时会触发权限校验失败,返回access denied错误。
修复操作步骤
- 复制你个人账号下已Fork的项目仓库地址(支持HTTPS或SSH协议)
- 进入本地项目目录,执行命令修改默认远端地址为你的Fork仓库地址:
git remote set-url origin 你的Fork仓库地址
- 若你后续需要同步原主仓库的最新更新,可将原主仓库添加为上游远端:
git remote add upstream 原主仓库地址
- 后续同步主仓库更新的标准流程如下:
- 拉取上游主仓库的最新提交:
git fetch upstream - 切换到本地主分支(通常为
main或master):git checkout main - 合并上游主仓库的更新到本地分支:
git merge upstream/main - 将合并后的最新代码推送到你的个人Fork仓库:
git push origin main
修改完成后你就可以正常将本地修改推送到个人Fork仓库,若需要向原主仓库贡献代码,在代码托管平台提交Pull Request即可。
内容的提问来源于stack exchange,提问作者nubgrammer
相关产品推荐
相关产品推荐

