我正在尝试通过终端上传文件。我正在尝试学习 git。 **
git add /Users/serra/Documents/useSDWebImage
git commit -m "学习过程"
git remote add origin
git push -u origin master
** 然后我收到此消息错误:无法将一些引用推送到 .... 我尝试了这些命令然后我只有我想上传的文件 到存储库 我丢失了存储库的其余部分。我该怎么办? **
**
答案 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
确实包含您要在源上恢复的历史记录时才合适。