如何拉取Git远程仓库变更且不覆盖本地已修改文件?(双仓库同步场景实操疑问)
如何同步Project A到Project B并保留本地修改
嘿,这个场景我太熟悉了——在多仓库同步又要保留本地定制化修改的时候,确实得选对Git命令才能避免踩坑。我来给你一步步拆解解决方案:
首先,先确认你的Project B已经正确添加了Project A作为远程仓库(假设你已经把它命名为a,如果还没加的话,先跑这个命令):
git remote add a <ProjectA的仓库地址>
接下来的操作既能同步Project A的最新变更,又能完美保留Project B里你已经修改过的文件,以及独有的新文件:
1. 先拉取Project A的最新代码
先把Project A的最新更新拉到本地,确保我们有最准确的基准:
git remote update a
2. 核心同步操作:冲突时优先本地版本
你提到的git rebase --onto a/master思路是对的,但要解决“大量冲突时优先当前分支版本”的问题,只需要给rebase加个策略参数就行:
方法一:一步到位,自动优先本地修改
执行rebase时直接指定冲突解决策略为ours,Git会自动在冲突时用你Project B当前分支的版本,同时自动同步那些你没修改过的原Project A文件:
git rebase --onto a/master --strategy-option ours
这个命令会把你在Project B上的所有提交,重新应用到Project A的最新master分支上——既同步了未修改的文件,又丝毫不碰你改过的内容。
方法二:如果已经触发冲突,批量解决
要是你已经跑了普通的rebase,结果弹出一堆冲突,也不用慌,批量执行下面的命令就能快速解决:
# 对所有冲突文件,直接采用本地分支的版本 git checkout --ours . # 把所有解决好的文件加入暂存区 git add . # 继续完成rebase git rebase --continue
重复这三步直到rebase结束就行,不过还是建议用方法一,一步到位更高效。
3. 验证同步结果
完成后,你可以用下面的命令确认结果是否符合预期:
# 查看当前分支状态 git status # 对比当前分支和Project A最新版本的差异,确认修改都保留了 git diff a/master
额外小提示
- 如果你更习惯用merge而不是rebase,也可以用merge的ours策略,效果一样,只是会生成一个合并提交:
git merge a/master --strategy-option ours - 执行操作前,建议先建个临时分支备份当前状态,以防万一:
git checkout -b backup-before-sync
内容的提问来源于stack exchange,提问作者John Smith
相关产品推荐
相关产品推荐

