如何在新机器上正确同步已有Git项目到GitHub远程仓库
已有Git项目迁移到新机器的正确操作
错误操作原因说明
你之前的操作核心问题是在新机器上重新执行git init生成了独立的本地提交历史,和远程仓库原有的提交历史完全无关,即便使用--allow-unrelated-histories参数合并了历史,也相当于用新生成的本地提交覆盖了远程提交记录,因此GitHub会判定所有文件都发生了更新。
推荐的标准迁移方案
该方案操作最简单,不会破坏远程提交历史:
- 在机器2的目标父目录下直接克隆远程仓库:
git clone git@github.com:username/project.git - 从机器1的项目目录中,把被
.gitignore规则忽略、未上传到远程的文件/目录,完整复制到机器2的项目对应路径下即可 - 此时本地仓库和远程完全同步,可直接正常执行Git操作
已复制非.git文件到机器2的适配方案
如果你已经把机器1除.git文件夹外的所有内容都复制到了机器2的对应目录,不想重新克隆,可按以下步骤操作:
- 进入机器2的项目根目录,初始化空Git仓库:
git init - 关联远程仓库地址:
git remote add origin git@github.com:username/project.git - 拉取远程master分支的历史记录:
git fetch origin master - 切换到本地master分支,和远程分支对齐:
git checkout master
此时Git会自动比对本地已有文件和远程文件的差异,仅会将.gitignore规则内的文件标记为未跟踪,其余和远程一致的文件不会产生任何变动,也不需要额外提交。
错误操作后的修复方案
如果你已经执行了之前的错误提交、推送操作,想要恢复到远程原有状态,可执行以下命令:git reset --hard origin/master
该操作会回退本地提交历史到和远程完全一致的状态,.gitignore内的本地私有文件不会被修改。
内容的提问来源于stack exchange,提问作者msquarederror
相关产品推荐
相关产品推荐

