意外从具有不同提交历史的远程仓库中提取后访问较旧的 Git 提交

Posted

技术标签:

【中文标题】意外从具有不同提交历史的远程仓库中提取后访问较旧的 Git 提交【英文标题】:Access older Git commits after accidentially pulling from remote repo with different commit history 【发布时间】:2020-12-06 14:34:12 【问题描述】:

我有一个本地 Git 存储库,现有提交跨越数月。我在 GitLab 上创建了一个新的 repo,用一个 README 文件初始化,所以它有一个提交。

将源添加到我的本地存储库后,我拉取了,现在我只看到一个来自源的提交,而我本地存储库历史中的所有其他提交都消失了。 .git 文件夹仍然是 6GB。

删除来自源的提交并再次访问我的原始提交的正确方法是什么?

【问题讨论】:

git reflog 向您展示了什么? 你输入了什么命令,向你展示了这个提交历史悠久? 来自空存储库的 git pull 应该完全没有效果。在此处显示您的确切命令将有助于其他人诊断真正出了什么问题。 @jonrsharpe 显示拉取之前的所有提交,谢谢。 @LeGEC git log 【参考方案1】:

部分成功:

如何找回不可见的提交:https://megakemp.com/2017/10/19/the-invisible-commits-part-one/

列出所有提交:git reflog

我们看到所有的提交,在从空的远程仓库拉取之前,pos 3 将是我们的本地仓库:

9518fc7 (HEAD -> master, origin/master, origin/HEAD) HEAD@0: reset: moving to HEAD
9518fc7 (HEAD -> master, origin/master, origin/HEAD) HEAD@1: rebase finished: returning to refs/heads/master
9518fc7 (HEAD -> master, origin/master, origin/HEAD) HEAD@2: pull: checkout 9518fc7b174ce9cfc87124e510128b1b0f8883d8
f468053 HEAD@3: checkout: moving from b894f7ca01f8d1418d9b83bc22e7f728e42e16ba to master
b894f7c HEAD@4: checkout: moving from master to b894f7ca01f8d1418d9b83bc22e7f728e42e16ba
f468053 HEAD@5: rebase: updating HEAD
f468053 HEAD@6: rebase: aborting
bd4c2c6 HEAD@7: rebase: checkout origin/master
f468053 HEAD@8: rebase: updating HEAD
f468053 HEAD@9: rebase: aborting
bd4c2c6 HEAD@10: rebase: checkout origin/master
f468053 HEAD@11: checkout: moving from f468053e2a1c646b0406868b900c180d974b1bc7 to master
f468053 HEAD@12: checkout: moving from bd4c2c6c5e7b5e9fc385f582df3bf0bd2028de11 to f468053e2a1c646b0406868b900c180d974b1bc7
bd4c2c6 HEAD@13: checkout: moving from master to bd4c2c6c5e7b5e9fc385f582df3bf0bd2028de11
f468053 HEAD@14: commit (amend): - release 0.8.33
bd4c2c6 HEAD@15: commit: - release 0.8.33

这失败了:git reset --hard master~3 -- 有错误:fatal: Failed to resolve 'master~3' as a valid revision.

这有效:git reset --hard @3

好吧。它恢复了旧的历史记录,但没有按照上面的列表结束应该是 pos 3 的提交。但至少我可以再次看到我所有的提交。

【讨论】:

以上是关于意外从具有不同提交历史的远程仓库中提取后访问较旧的 Git 提交的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Git 中标记较旧的提交?

如何运行具有不同/较旧的 Dart SDK 依赖项的颤振项目?

#yyds干货盘点#Git学习-如何修改已经提交的记录

Git工作流程

git与gitlab学习

从修改后的提交中删除文件