如果我的.git
文件夹中似乎有些东西搞砸了,我无法修复它,但我想完全按原样保存我的工作文件夹,如何从远程存储库"重置"我的.git
文件夹?
下面的过程可用于通过从远程重新初始化.git
文件夹来"修复"它。 此过程假定您当前的本地分支与远程分支位于同一提交上。 否则,您将丢失任何本地提交,但不会丢失本地更改。 此外,任何被"忽略"的本地文件都将保持不变。
此外,任何仅限本地的分支都将丢失。 如果要保留这些分支,请先将这些分支推送到远程。 您还可以在本地复制整个预先修复的工作文件夹,然后将其添加为"远程",然后将这些分支拉入固定副本中(在完成以下步骤后)。
最好在开始之前备份整个本地工作文件夹树,以防发生意外问题。
-
确定您当前所在的分支:
git status
-
如果您有自定义挂钩,请保存
.git/hooks
文件夹 -
从工作副本中删除(或移动)
.git
文件夹 -
在工作副本中重新初始化 git 存储库:
git init
-
手动添加
origin
遥控器:git remote add origin *url*
-
获取远程存储库:
git fetch
-
重新创建工作副本在开始之前所在的分支:
git checkout -b *branch*
-
将该分支引用指向远程分支,而不影响工作副本:
git reset --mixed origin/*branch*
-
将任何保存的挂钩复制到
.git/hooks
文件夹中。 -
如有必要,请执行任何清理操作,例如还原文件等。
改进了使用git reset --mixed
而不是git reset --soft
加上@MarkAdelsberger提供的git add .
(请参阅注释)。
改进了保存@gary-kindel提供的.git/hooks
文件夹(请参阅注释)。
假设我们在混乱的存储库上方的目录中,称为repo
,并且我们处于 GNU Coreutils 的 shell 环境中:
rm -rf repo/.git
git clone -d url://remote/repo -b some-branch new-repo
cp -a repo/. new-repo/.
现在使用new-repo
,否则:
$ rm -rf repo
$ mv new-repo repo
这里的重点是,我们将远程存储库的新副本签出到我们想要的分支,而我们的任何文件都不会妨碍同名文件。然后我们在此之上复制我们的工作副本。