缺失.git目录的原有Git仓库如何重新初始化Git
恢复方法
完全可以恢复成正常工作的Git仓库,别直接走新仓库init → add → commit → push的流程,会直接断开和原仓库的历史关联,给自己后续协作埋坑,按下面步骤操作就行:
- 进入你拷贝过来的项目根目录,执行本地仓库初始化:
git init - 关联原仓库的远程地址,把命令里的
<远程仓库地址>替换成你原仓库的Git地址(和你之前其他电脑上配的origin地址完全一致就行,支持SSH或者HTTPS格式):git remote add origin <远程仓库地址> - 拉取远程仓库所有的分支、提交记录等元数据,这一步不会改动你当前目录下的任何文件:
git fetch origin - 把本地Git的版本指针对齐到你文件对应的远程分支,注意把命令里的
main换成你原仓库实际用的分支名(老仓库主分支可能叫master,如果你拷贝的是开发分支就换对应分支名):git reset --mixed origin/main
敲重点:这里绝对不要用
--hard参数。--mixed只会更新Git内部的版本指针,不会动你当前目录里存的文件;--hard会强制把本地文件覆盖成远程分支的版本,你本地存的未提交修改会直接丢失,找都找不回来。
验证与后续处理
- 对齐指针后执行
git status看状态:如果你拷贝的文件和对应远程分支的提交内容完全一致,会提示工作区干净、没有待提交变更,说明恢复已经完成,后续pull、push、切分支、提交代码和原来的仓库没有任何区别 - 如果提示有文件变更,一般是两种情况:要么你拷贝的文件本身就带了其他电脑上没提交的本地修改,这种正常提交变更就行;要么是你对齐的分支/提交版本和你当初拷贝文件时的版本不匹配,回忆下拷贝时对应的提交哈希,执行
git reset --mixed <对应提交哈希>重新对齐即可 - 如果原仓库配置了Git子模块,对齐指针后执行
git submodule update --init --recursive拉取子模块内容就可以正常用了
避坑说明
别图省事初始化完直接全量add、commit、push,这么操作生成的是一套和原仓库完全独立的提交树,原仓库的所有历史提交记录全断,之后和其他协作者同步代码时会出现海量无意义冲突,本质相当于你删了原仓库新建了个同名仓库传代码,纯纯给自己找事。
内容的提问来源于stack exchange,提问作者xploreraj
相关产品推荐
相关产品推荐

