如何在不影响已签出工作文件夹的情况下从远程存储库重置整个 .git 文件夹?



如果我的.git文件夹中似乎有些东西搞砸了,我无法修复它,但我想完全按原样保存我的工作文件夹,如何从远程存储库"重置"我的.git文件夹?

下面的过程可用于通过从远程重新初始化.git文件夹来"修复"它。 此过程假定您当前的本地分支与远程分支位于同一提交上。 否则,您将丢失任何本地提交,但不会丢失本地更改。 此外,任何被"忽略"的本地文件都将保持不变。

此外,任何仅限本地的分支都将丢失。 如果要保留这些分支,请先将这些分支推送到远程。 您还可以在本地复制整个预先修复的工作文件夹,然后将其添加为"远程",然后将这些分支拉入固定副本中(在完成以下步骤后)。

最好在开始之前备份整个本地工作文件夹树,以防发生意外问题。

  1. 确定您当前所在的分支:

    git status

  2. 如果您有自定义挂钩,请保存.git/hooks文件夹

  3. 从工作副本中删除(或移动).git文件夹

  4. 在工作副本中重新初始化 git 存储库:

    git init

  5. 手动添加origin遥控器:

    git remote add origin *url*

  6. 获取远程存储库:

    git fetch

  7. 重新创建工作副本在开始之前所在的分支:

    git checkout -b *branch*

  8. 将该分支引用指向远程分支,而不影响工作副本:

    git reset --mixed origin/*branch*

  9. 将任何保存的挂钩复制到.git/hooks文件夹中。

  10. 如有必要,请执行任何清理操作,例如还原文件等。

改进了使用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

这里的重点是,我们将远程存储库的新副本签出到我们想要的分支,而我们的任何文件都不会妨碍同名文件。然后我们在此之上复制我们的工作副本。

相关内容

  • 没有找到相关文章

最新更新