git pull 出错后如何恢复

git pull 出错后如何恢复

我使用以下方法创建了一个大型存储库的浅克隆(为了节省我的时间)

git clone --depth=1...

几天后,我想从远程存储库获取最新的提交。我输入了

git pull

但它开始下载比我一开始下载的信息多得多的信息(我最初的浅克隆大约是 150MB,而这里的拉取已经下载了 100 多 MB,显示下载量为 22%),所以我按下 Ctrl-C 并停止了它。之后,我尝试(只是随机地)

git pull --depth=1

这引发了很多错误。现在我剩下一个本地存储库,其中 git status 显示:

# On branch master
# Your branch and 'origin/master' have diverged,
# and have 3 and 4 different commits each, respectively.
#

除了创建新的浅克隆之外,还有其他方法可以解决问题吗?我没有自己的提交,所以一切都很好。

答案1

当您使用 git 克隆 repo 时,您将获得 repo 的完整历史记录,从第一次提交到最后一次提交,但是,由于您进行了浅克隆,因此您只能获得您指定的历史深度。

如果您知道想要返回哪个提交,您可以尝试git reset --hard _commit_将您的 HEAD、索引和工作目录的内容恢复为该特定提交(在本例中为第一个提交)中的内容。

如果您不记得它是哪一个,只需用它git log来检查您要查找的提交即可。

git log

commit c09ea7f2a7f01921fda4ee0b53934cba42fb9ee3
Author: That guy
Date:   The other day

This was your first commit

请记住,您只需要提交 ID 的前几个字符即可重置,因此使用:

git reset --hard c09ea7f2a7f019 

应该足以将提交标识为唯一的,并将 HEAD、索引和目录内容重置为该提交中的内容。

答案2

您还可以

git pull --rebase --depth=1

这将尝试在拉取后重新设置本地更改(尽管您没有做任何事情,但 git 认为您已经做了)。然后 git 应该会告诉您存在冲突,因为它会在文件中找到相同的更改。然后您只需执行 -

git rebase --skip

即你要求 git 不要应用你的本地更改。它应该可以解决你的问题。

答案3

# delete local master and checkout remote
git branch -D master
git checkout master
# clean up any objects left by your interrupted pull
git prune
git gc

相关内容