如何使用Git合并基于同一初始基础的两个协作开发项目?
嗨,这个场景太常见了——一开始没同步Git,各自在本地改代码,现在要合并完全不用手动复制粘贴,也不用担心覆盖,Git有现成的方案,按步骤来就行:
第一步:先给对方的本地代码「套上Git壳」
你的协作伙伴现在的本地文件夹还不是Git仓库,先让他做这几步(先备份总没错!):
- 把当前本地项目整个复制一份到别的文件夹(防手抖操作失误)
- 进入他的原项目文件夹,初始化Git并提交所有本地改动:
# 切换到他的本地项目目录 cd /路径/到/他的/本地/项目 # 初始化Git仓库 git init # 把所有文件加入暂存区 git add . # 提交本地的全部改动,备注写清楚方便后续识别 git commit -m "本地独立开发的所有改动"
第二步:拉取你的远程仓库并合并
接下来让他把你的远程仓库加为Git源,然后拉取你的代码并合并——这里关键要加一个参数,因为两个仓库没有共同的提交历史:
# 添加你的远程仓库地址(替换成实际的仓库URL) git remote add your-repo https://你的Git仓库地址.git # 拉取你的主分支代码(如果你的主分支是master就换成master) git pull your-repo main --allow-unrelated-histories
划重点:
--allow-unrelated-histories是必须的!因为你和他的代码是完全独立开始的,Git默认会拒绝合并无共同祖先的仓库,这个参数就是告诉Git允许这种合并。
这时候Git会自动合并所有不冲突的文件,如果遇到冲突(比如同一个文件你们俩都改了),Git会在冲突文件里用<<<<<<<、=======、>>>>>>>标记出双方的改动,你们只需要一起协商修改冲突部分,然后提交合并结果就行:
# 解决冲突后,把修改好的文件加入暂存 git add . # 提交合并后的结果 git commit -m "合并[你的名字]的远程仓库代码"
第三步:同步到远程仓库(按需操作)
如果你们想让合并后的代码同步到远程仓库,让他推上去就行(前提是他有你的仓库推送权限):
# 把合并后的主分支推送到你的远程仓库 git push your-repo main
或者也可以让他推一个新分支到远程,你再拉取这个分支合并到你的主分支,这样更灵活。
针对你问的两个核心问题的明确答案:
对方能否克隆你的仓库后叠加本地工作?
可以,但不如上面的方法稳妥——直接克隆的话,他需要把本地文件复制到克隆仓库里,容易漏文件或者误覆盖;而用Git合并的方式,能自动处理绝大多数非冲突文件,不会乱覆盖。有没有无需手动录入代码、不会覆盖的方式推送对方本地文件?
完全有!上面的流程全程不需要手动敲代码(除了解决冲突的协商修改),Git会自动合并双方的文件,只有冲突部分会明确标记,绝对不会偷偷覆盖任何一方的原有代码。
另外补充个小技巧:如果对方嫌本地操作麻烦,也可以让他把本地项目打包发给你,你在自己的仓库里把他的本地文件夹加为Git源,然后拉取合并,效果是一样的。
内容的提问来源于stack exchange,提问作者Jack N

