如何通过电脑A实现从电脑B向git repository推送代码?
解决通过A中转向Git服务器推送代码的正确流程
你当前遇到的变更显示异常、推送前需撤销变更的问题,核心原因是把非裸Git仓库当作中转推送目标——非裸仓库带有工作区,接收推送后工作区与分支状态不一致,进而引发冲突和显示错乱。以下是标准化的中转推送流程:
一、在A上创建中转裸仓库(关键步骤)
裸仓库无工作区,专门用于接收推送,不会产生工作区冲突:
- 在A的共享文件夹内执行命令创建裸仓库:
(惯例用git init --bare shared-repo.git.git结尾命名裸仓库,方便识别) - 为裸仓库关联上游Git服务器:
(若你的主分支是cd /path/to/shared-folder/shared-repo.git git remote add origin <Git服务器的仓库地址> git fetch origin git branch --set-upstream-to=origin/main mainmaster,替换对应字段即可)
二、在B上配置本地仓库
- 从A的共享裸仓库克隆到B本地:
git clone //A的共享路径/shared-repo.git local-repo - 进入B的本地仓库,配置专属提交用户信息(避免与A的用户混淆):
cd local-repo git config user.name "你的姓名" git config user.email "你的邮箱"
三、日常推送流程
B端提交并推送到A中转仓库
- 开发完成后,提交本地变更:
git add . git commit -m "feat: 新增XX功能" - 拉取中转仓库的最新代码(避免冲突),再推送:
git pull origin main git push origin main
A端推送到Git服务器
进入A的共享裸仓库目录,直接推送到上游服务器:
cd /path/to/shared-folder/shared-repo.git git push origin main
额外注意事项
- B端每次推送前必须先拉取,避免与其他提交产生冲突
- 若需从Git服务器拉取最新代码到B,先在A的裸仓库执行
git pull origin main,再在B端执行git pull origin main - 禁止在共享文件夹使用非裸仓库做中转,这是引发你之前异常的核心原因
内容的提问来源于stack exchange,提问作者Jiri
相关产品推荐
相关产品推荐

