我的 git repo 有问题,我丢失了所有提交?

时间:2021-01-09 08:40:55

标签: linux git

我正在尝试通过终端上传文件。我正在尝试学习 git。 **

  • git add /Users/serra/Documents/useSDWebImage

  • git commit -m "学习过程"

  • git remote add origin

  • git push -u origin master

** 然后我收到此消息错误:无法将一些引用推送到 .... 我尝试了这些命令然后我只有我想上传的文件 到存储库 我丢失了存储库的其余部分。我该怎么办? **

  • git pull --rebase origin main
  • git push origin main
  • git pull origin master
  • git push origin master
  • git push origin master --force

**

1 个答案:

答案 0 :(得分:2)

TL;DR

您需要在某处找到 origin/master 的备份。

git reflog 可能会对您有所帮助。

错误

首先,让我们回顾一下前四个命令并解释错误所在。

在前两个命令 git add 和 git commit 中,您将在本地沙箱中创建提交,并以事先在沙箱中的任何内容为基础。

在第三个命令中,你添加了你的遥控器,这意味着你的提交不是在那个遥控器之上,而是在其他东西之上。

在您的第四个命令中,Git 正确地告诉您不能推送,因为您的本地沙箱不是建立在远程沙箱之上的。注意 Git 的错误消息很重要,它们几乎总是提供信息。

现在,您没有显示您运行的任何命令的输出,但我猜 git push origin master --force 是您遥控器上删除的内容。

你应该做什么

通常,您首先克隆远程,然后在其上提交内容:

git clone <URL>
cd <SANDBOX_DIR>
git add <file inside this directory>
git commit
git push

如何解决这个问题

有多种方法,但它们都基于从希望存在于某处的备份中恢复内容。

如果您的遥控器是 GitHub,它会保留引用历史记录,您应该能够以某种方式在那里找到旧的 master 分支。如果您的遥控器是其他服务器,那希望也是如此。如果另一个团队成员的沙箱包含您要恢复的有效 master,他们可以通过在自己的沙箱中执行 git push origin master --force 来解决问题,但请确保他们在执行之前了解自己在做什么做吧。

我在这里的回答不完整,因为您没有提供足够的信息。如果您使用有关遥控器的更多详细信息更新您的问题,我会更新它。

更新 - git reflog 可能有帮助

当您执行 git pull origin master 时,假设 master 是您关心的分支,您可能在 master 上获得了您想要的正确 origin 提交的本地副本。您可以使用 git reflog 在沙箱中查看本地 HEAD 的历史记录。如果你在那里找到好的提交,这个解决方案可以工作:

这里我假设这些不是您想保存在沙箱中的工作。

git checkout master
git reset --hard <good commit> # WARNING: destroys any uncommitted local changes

此时,请检查您的沙箱是否包含您要还原到原点的文件。如果是这样,请继续执行以下命令:

git push --force origin master

但是请注意,这将覆盖原始内容。仅当您仔细验证沙箱中的 master 确实包含您要在源上恢复的历史记录时才合适。

相关问题