【发布时间】:2019-07-24 14:26:19
【问题描述】:
如果我的.git 文件夹中出现问题并且我无法修复它,但我想按原样保留我的工作文件夹,我该如何从远程“重置”我的.git 文件夹仓库?
【问题讨论】:
标签: git
如果我的.git 文件夹中出现问题并且我无法修复它,但我想按原样保留我的工作文件夹,我该如何从远程“重置”我的.git 文件夹仓库?
【问题讨论】:
标签: git
以下过程可用于通过远程重新初始化您的.git 文件夹来“修复”它。此过程假定您当前的本地分支与远程分支在同一提交上。如果没有,您将丢失任何本地提交,但不会丢失本地更改。此外,任何被“忽略”的本地文件都将保持不变。
此外,任何仅限本地的分支都将丢失。如果要保留这些分支,请先将它们推送到远程。您还可以在本地复制整个预先修复的工作文件夹,然后将其添加为“远程”,然后将这些分支拉入您的固定副本(完成以下步骤后)。
最好在开始之前备份整个本地工作文件夹树,以防出现意外问题。
确定您当前所在的分支:
git status
如果您有自定义挂钩,请保存 .git/hooks 文件夹
从工作副本中删除(或移动).git 文件夹
在你的工作副本中重新初始化一个 git repo:
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 .(参见cmets)。
改进保存@gary-kindel 提供的.git/hooks 文件夹(参见cmets)。
【讨论】:
--mixed,并跳过第 8 步,除非/直到我特别想重新进行更改
git reset 手册页说,关于 --mixed,“这是默认操作”,并且在此之前,“如果省略 --mixed'。 "假设我们位于混乱的存储库上方的目录中,名为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
这里的重点是,我们将远程 repo 的新副本签出到我们想要的分支,而我们的任何文件都不会妨碍同名文件。然后我们在上面复制我们的工作副本。
【讨论】: