【问题标题】:How to get back deleted files after forced push [duplicate]强制推送后如何取回已删除的文件[重复]
【发布时间】:2020-11-24 06:33:48
【问题描述】:

我试图解决一个我无法pull or push 的问题。似乎有一个文件导致了问题。我跑了git push -f origin master,现在远程仓库(Bitbucket)中的大部分文件都不见了。我如何用这个提交历史让他们回来?我尝试了 git revert HEAD~1,但它不起作用(它更改了 1 个文件但没有恢复任何文件)。我跑了git log,我可以在那里看到我所有的提交,所以我猜 git 在某种意义上仍然知道它们——我非常不明白 git。

【问题讨论】:

  • git 是一个版本控制系统:每个提交仍然存在但是。当强制推动时,您将对接下来发生的任何事情承担全部责任和义务。确定你喜欢的提交,然后尝试git checkout <sha of that commit>
  • @DaemonPainter Identify a commit you like 怎么样?通过git log?
  • 是的,git log,或者通过bitbucket检查图表或者提交列表
  • 你能展示一个你的 git log 输出的例子吗?
  • @DaemonPainter 运行checkout后我该怎么办?

标签: git bitbucket push git-push


【解决方案1】:

当您强制将本地 master 分支推送到源时,您基本上强制远程分支与您的本地分支相同。

如果 Bitbucket 上缺少文件,则意味着您的本地分支上也缺少这些文件。 所以首先,在你的本地 master 分支上解决问题,然后再次强制推送。

运行git log 只会向您显示属于您的分支的提交。如果缺少某些文件,您可能看不到这些提交。

运行 git reflog 将为您提供完整的历史记录,包括在分支、合并和变基之间切换。

使用 reflog 来识别您的“最后一次正确的”提交。一旦你找到它 - 标记它(这样更容易找到)并开始一个分支。

然后您可以将此分支与master 分支进行比较,并确保它是您要查找的提交。

更新

一旦你有提交哈希重置你的主分支并强制推送:

git reset --hard <hash>
git push --force origin master

【讨论】:

  • 我想我在 reflog 中找到了一个,那么我该如何回到它并恢复被删除文件的历史记录?
  • @northerner - 我更新了答案
  • 哇,谢谢!它确实有效!
  • Git 是一个令人困惑的工具。让我作为一个简单的问题。为什么在运行 logreflog 时哈希值要短得多?例如 commit 5e34ec6922d6021b5a4d9b02355086bd02434c18 (HEAD -&gt; master, origin/master)5e23ec6 (HEAD -&gt; master, origin/master) HEAD@{0}: rebase: updating HEAD
猜你喜欢
  • 2015-12-07
  • 2014-01-15
  • 1970-01-01
  • 2016-03-18
  • 2010-12-23
  • 2022-01-22
  • 2013-05-03
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多