我正在使用git,显然我搞砸了一些东西。
因此,我有我的本地PC(称为A(,然后是本地PC(称为B(和遥控器。
在一系列事件(忘记拉东西,然后在本地工作等等(之后,情况是这样的:
- 远程有一个副本
- 我的两个本地文件都有不同的更改 在
- 上周,我一直在从本地PC B进行更改。所以本地 PC A 有修订版 2,本地 PC B 有修订版 11(服务器的最新版(,但它们都有不同的本地更改
在我试图看看该怎么做时,我让事情变得更糟。
- 我从本地PC A推送数据(也许是强制的 - 我不确定(
但是这些删除了我所有其他更改。我不知道我是怎么做到的。
不仅如此,我从 PC B(修订版 3 到 11(进行的所有提交都从历史中消失了 - 我在任何地方都看不到它们。
因此,我让我的远程和本地 PC 具有相同的数据 - 并且本地 PC B 在其中进行更改。
我知道这两周我更改的文件 - 所以我正在尝试以下内容(假设它是一个文件 - file.php(
git add file.php
git commit -m "test"
no changes added to commit
乳清试图推动一些东西,我看到这样的东西:
error: failed to push some refs to 'https://github.com/<url>'
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.
那么我需要做什么呢?
我想做的是 - 只需将此文件推送到我的遥控器,然后我将执行 git pull 以同步所有内容。
我正在从命令行做事,不使用任何GUI,因为我正在VirtualBox上工作。
另外,如果我这样做:
git status
我看到一个文件已修改。
然后,如果我提交这个 - 一切正常,但由于上一个错误,我无法将其推送到服务器。请注意,此行为仅发生在属于远程分支中根本不存在的文件夹的文件上。
您的主要问题似乎是您在 PC B 上"丢失"了提交。
您可能已经从 A 强制推送它们,然后在 B 中提取这些更改,并且这样做会丢失对 B 上的更改的跟踪。
您应该能够通过运行找到丢失的提交
git reflog
在电脑 B 上。这将显示 PC B 上 HEAD 指针的变化。 检查输出。它应该包含提交消息等。当您在 PC B 上找到修订版 11 提交时,请执行
git reset --hard <hash of rev 11>
这将带您进入PC B上丢失的提交。
为了能够推送这些更改,您必须解决与遥控器的任何冲突。通过制定标准来做到这一点
git pull
这应该会触发本地更改与远程更改之间的合并。当你解决了这些问题时,你应该能够再次推动。