Git操作:如何定期将repo1改动合并到保留自身修改的repo2中?
Git跨仓库同步方案
冲突原因说明
你之前的操作属于将两个历史分叉过大的分支强行合并,且拉取方向错误(将repo2的分支合并到repo1的本地分支上),Git无法正确追溯两个分支的共同变更基准,因此会触发单侧修改文件也报冲突的问题。
首次同步配置
- 克隆repo2到本地:
git clone git@github.com:vikasgope/project2.git - 进入项目目录后,添加repo1作为上游远程源:
git remote add repo1-upstream git@github.com:vikasgope/project1.git - 验证配置:
git remote -v输出结果中能看到origin对应repo2地址、repo1-upstream对应repo1地址即为配置成功
定期同步操作步骤
方案1:rebase模式(推荐,历史清晰冲突少)
适用于repo2维护者少、团队约定使用线性提交历史的场景:
- 切换到repo2的主分支(根据实际分支名替换master为main等):
git checkout master - 拉取repo2的最新提交,保证本地分支和远程一致:
git pull origin master - 拉取repo1的所有最新提交:
git fetch repo1-upstream - 执行变基操作,将repo2的所有提交放到repo1最新提交之后重放:
git rebase repo1-upstream/master该操作只会在两个仓库同时修改了同一代码块时才会触发冲突,不会出现单侧修改文件冲突的问题
- 若遇到冲突,修改冲突文件后执行
git add <冲突文件路径>,再执行git rebase --continue直到所有提交重放完成;若需要终止同步回到操作前状态,执行git rebase --abort - 同步完成后推送到repo2远程仓库:
git push origin master -f强制推送前需确认所有repo2开发者已提交本地修改,推送后通知所有成员执行
git pull --rebase拉取最新代码,避免本地历史分叉
方案2:merge模式(适合多人协作无rebase约定的场景)
不需要强制推送,不会影响其他成员本地操作:
- 完成和方案1相同的前3步操作
- 执行合并操作:
git merge repo1-upstream/master - 按提示解决冲突后,执行
git add <冲突文件路径>,再执行git commit完成合并提交 - 直接推送到远程即可:
git push origin master
内容的提问来源于stack exchange,提问作者Vikas Gope
相关产品推荐
相关产品推荐

