我使用以下方法创建了一个大型存储库的浅克隆(为了节省我的时间)
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