覆盖git remote中的一些文件

时间:2014-12-15 15:58:57

标签: git git-merge git-push git-pull

我正在使用git,显然我搞砸了。

所以,我有我的本地PC(称为A),然后是本地PC(称为B)和我的遥控器。

经过一系列事件(忘了拉东西,然后在当地工作等等)情况如下:

  • remote有副本
  • 我的两个本地文件都有不同的更改
  • 在上周我一直在从本地PC B进行更改。所以本地PC A有rev 2,并且本地PC B有rev 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来同步所有内容。

我正在从命令行执行操作,因为我正在使用VirtualBox,所以没有使用任何GUI。

另外,如果我这样做:

git status

我看到一个文件已修改。

然后如果我提交这个 - 一切都很顺利,但由于之前的错误,我无法将其推送到服务器。请注意,此行为仅适用于属于远程分支中根本不存在的文件夹的文件。

1 个答案:

答案 0 :(得分:2)

你的主要问题似乎是你已经失去了#34;在PC B上提交。

你可能已经强制将它们从A中推出然后将这些变化拉到B中,然后将这些变化记录在B上。

您应该可以通过运行

找到丢失的提交
git reflog

在PC B上。这将显示PC B上HEAD指针的变化。检查输出。它应该包含提交消息等。当您在PC B上找到rev 11提交时,请执行

git reset --hard <hash of rev 11>

这将带您到PC B上丢失的提交。

为了能够推送这些更改,您必须解决与遥控器的任何冲突。通过制定标准

来做到这一点
git pull

这应该会触发本地更改与远程更改之间的合并。当你解决了那些问题后,你应该再次推进。