【问题标题】:How can I recover last commit after git push forcegit push force 后如何恢复上次提交
【发布时间】:2021-11-19 15:35:02
【问题描述】:

我在带有 master 分支的 bitbucket 上有一个项目存储库。这个分支有一些我的团队已经提交的提交(最新的提交不是我提交的)。

我刚刚做了git push --force,却不知道它会在我最近一次拉取之后删除所有提交。所以现在我团队的提交刚刚被删除,最新的提交是我刚刚做的git push --force

在我执行git push --force 之后,有什么方法可以恢复团队的提交?

我已经阅读了一些解决方案,它说先执行git reflog,然后执行git reset –hard HEAD@{HEAD-NUMBER}。但我担心,它会恢复最新的提交还是只恢复我的最新提交(不是我的团队所做的最新提交)?

【问题讨论】:

  • 如果该提交曾经在您的计算机上,您只能使用reflog - 如果没有,无论谁推送它都必须运行reflog
  • @jonrsharpe 那么如果我这样做 git reset –hard HEAD@{HEAD-NUMBER} 它只会恢复到我所做的提交?

标签: git bitbucket commit git-commit git-push


【解决方案1】:

Git reflog 对您没有帮助,因为您没有拉取队友的更改并通过推送您的更改强行将他们从远程删除。

已推送您已强制删除的原始提交的队友仍然在他们的本地分支中。

他们可以再次强制推送他们的分支并用之前的内容覆盖您的更改。然后您必须获取他们的更改并将它们合并到您的分支。

【讨论】:

  • 哦,一定很有趣!
  • 其实很简单,只要跟踪正在发生的事情。 Git 很简单,只要您可以跟踪发生的操作和顺序即可。
  • 哦,对不起,我在你写“强制推送他们的 [master] 分支”的部分讽刺了 :) 你是正确的
【解决方案2】:

你在强制推送之前取过吗?如果是这样,你应该在这里:

git reflog origin/master

另外,当你强制推送时,它会告诉你旧的和新的哈希(... 或介于两者之间),所以如果你仍然打开控制台,你有旧的哈希,并且可能能够得到它.

如果您的计算机上没有,您推送该提交的队友仍然会在他们的计算机上保存它。

他们几乎总是能这样看

git reflog origin/master

然后他们可以强制将原始哈希推回

git push origin [original-hash]:master --force-with-lease

另外,在未来,请始终使用--force-with-lease,这样您就知道您并没有删除您尚未获取的内容......所以如果您犯了错误,您删除的内容都在您计算机上的某个地方

【讨论】:

  • 嗨,感谢您的回答。我已经告诉我的团队,当他尝试做 git push origin [original-hash]:master 他得到错误 ! [rejected] [original-hash] -> master (non-fast-forward) error: failed to push some refs to [repo-url]
  • 对不起,我并不是要按字面意思输入[original-hash]。我的意思是,当您的同事查看git reflog origin/master 时,他们会在左侧看到一个哈希列表..
  • 哦,等等,你知道 - 是的,他们必须强制推动;我会编辑
  • 已完成 - 对不起
猜你喜欢
  • 2012-09-16
  • 2017-10-04
  • 2013-11-22
  • 1970-01-01
  • 2017-12-16
  • 2018-11-10
  • 1970-01-01
  • 2014-06-19
相关资源
最近更新 更多