【发布时间】:2019-10-12 20:02:42
【问题描述】:
我有 2 个存储库,用于前端和后端。远程后端存储库与本地存储库非常不同,因为我独自工作,我决定通过删除本地存储库中的 .git 文件夹来覆盖远程存储库,通过 git init 启动新的并通过以下方式全部推送:
git push --force dev master
但具有讽刺意味的是,我添加了错误的分支:
git remote add dev frontend-repo
并覆盖我上个月工作的前端存储库。
我取消了最后一次提交:
git revert {commit_id}
现在我有一个空的前端存储库,我已经工作了一个月,并且我想更改未触及的存储库。本地我有所有提交历史和存储库本身,问题 - 有没有办法恢复这个历史甚至完全撤消最近的更改?
【问题讨论】:
-
您分别在哪些计算机上的哪些存储库中运行了这些命令?
-
如果这不是很久以前,删除的提交仍然存在于您的存储库中,但无法访问,因为它们不再被引用。因此,您可能可以使用
git fsck找到已删除的提交。见this question, -
短语“提交历史”可能是多余的:在 Git 中,提交是历史。每个提交都有自己唯一的哈希 ID,每个提交通过哈希 ID 引用其直接父级。你要么有提交,要么没有。如果您有提交,则 commit 确定其父级,从而确定其历史记录。
-
请注意,Git 通常发现提交,但是,从分支名称开始。分支名称包含一 (1) 个提交的哈希 ID。该提交列出了它的父母,这是它的直接历史。每个父提交都会列出 其 个父级,依此类推。所以分支名称
master的历史是:无论提交哈希 IDmaster持有什么。将正确的哈希 ID 放在名称master中,您就会拥有您喜欢的任何历史记录。 -
每个存储库都有自己的分支名称。
git push --force只是让一个 Git 调用另一个 Git 并说:将您的分支名称设置为 如果您可以在具有存储库的机器上登录,您可以使用! git reflog、git fsck和其他答案如下所示。如果没有,您可以尝试在您拥有的任何存储库副本中找到正确的哈希 ID,然后再次git push --force。
标签: git