从本地强制推送后,在GitHub站点上远程编辑的文件丢失

时间:2019-01-02 12:48:04

标签: git github

在我的远程存储库中,我只有一个正在使用的自述文件。我在上次更新后提交了自述文件。此后,我不小心将一个文件夹从本地存储库推送到了该远程存储库,导致丢失了我正在处理的自述文件。

有什么办法可以恢复自述文件吗?

n.b。浏览了我的命令历史记录,发现我做了git push origin master --force。我是一个初学者,我认为使用武力时出了点问题。没有力,错误是:

hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

编辑:该错误看起来几乎像是发生合并冲突,但是争论的焦点在于,我的问题是在从本地推送而不拉出它之后,丢失了来自远程的提交。接受的答案解决了我的问题。

1 个答案:

答案 0 :(得分:2)

其中涉及一些步骤,所以让我们看一下。

  

首先,重要的是要了解“丢失的提交”不会立即永久丢失,而是可能仍在有限的时间内驻留在磁盘上。非常重要的是,在尝试解决当前问题之前,不要进一步推送或修改有问题的存储库

此外,根据您已经对存储库执行的操作,可能为时已晚。但是,让我们假设它不是,看看是否可以找回丢失的文件。

首先,导航到有问题的GitHub存储库,就是这样(我以自己的存储库为例,请按如下所示编辑相关位):

https://github.com/lassevk/LVK
                   ^--edit---^

然后,我们对URL进行一些编辑以获取存储库的事件日志:

https://api.github.com/repos/lassevk/LVK/events
                             ^--edit---^

这应该给你一个json文件。在此json文件中,您需要使用浏览器中的Ctrl-F 搜索以查找有问题的文件或其内容。假设您找到它,它看起来像这样:

"commits": [
  {
    "sha": "a52da7697640b77f0b2e16de8d6e8ad8c29924e2",
    "author": {
      "email": "lasse@vkarlsen.no",
      "name": "Lasse Vågsæther Karlsen"
    },
    "message": "Rewrite HttpClient related code.",
    "distinct": false,
    "url": "https://api.github.com/repos/lassevk/LVK/commits/a52da7697640b77f0b2e16de8d6e8ad8c29924e2"

在那看到SHA吗?复制并将其粘贴到以下类型的链接中:

https://github.com/lassevk/LVK/commit/a52da7697640b77f0b2e16de8d6e8ad8c29924e2
                   ^-------------------------edit----------------------------^

如果这给您一个“ 404 not found”,那么据我所知,您很不走运。

但是,如果它打开了提交页面,那么您可以打开一个接一个地修改的文件,并将其原始内容作为文件直接下载到本地磁盘,然后可以将它们视需要集成到存储库中。

>

如果您想为提交创建分支并在以后进行处理,可以使用以下URL代替:

https://github.com/lassevk/LVK/tree/a52da7697640b77f0b2e16de8d6e8ad8c29924e2
                   ^--edit---^      ^------------------edit----------------^

这应该打开该提交的资源库浏览器,然后您可以使用分支的下拉列表创建指向该提交的新分支。分支指向提交后,它不再丢失

例如,您然后可以在本地执行以下操作:

git fetch
git checkout master                # or whichever branch this is on
git merge NAME-OF-TEMP-BRANCH

这应该将该文件合并到您的分支中。