强制推送后的Git拉错误 - 试图避免硬复位

时间:2017-05-31 01:56:51

标签: git github version-control

我们用两个主要分支构建我们的git流:master和develop(这是master的分支)。在为我们的网站创建新功能时,我们从master创建一个分支,进行更改,然后将该分支(称为分支A)合并到develop进行测试。

我们在PHP中有一个调用passthu("git pull 2>&1")的部署脚本,以便将更改提取到我们的开发服务器上,该服务器尽可能地模拟我们的实时服务器。我们的开发服务器从开发分支中提取这些更改。

当我们对开发服务器上的更改感到满意时,我们将分支A合并到主分支中,并在我们的实时服务器上运行部署脚本,以将我们的更改应用到实际站点。

我的一位同事合并了他从大师(B到C)制作的两个分支,然后将结果合并到了开发中。他声称Github在开发服务器上运行部署脚本并且决定强制推送他自己的开发副本以便将存储库恢复到之前的状态后,“行为奇怪”。

现在,在进行新的更改并正常推送我们的工作流程后尝试从开发服务器运行部署脚本时,我发现"Please tell me who you are""fatal: empty indent not allowed"错误。

我尝试通过创建另一个将passthru("git reset --soft 2>&1")作为this answer recommends运行的脚本来解决此问题,该脚本删除了这些错误。现在,我在进行任何更改后看到以下错误,告诉我git无法识别存储库中的文件:

"error: Your local changes to the following files would be overwritten by merge: Please, commit your changes or stash them before you can merge.
Aborting"

尝试变基(git pull --rebasegit rebase -i origin/develop)会给我带来相同的"Please tell me who you are""fatal: empty indent not allowed"错误。

作为最后的手段,我正在努力重置。还有什么我可以先尝试,不会对我们的开发网站造成重大问题吗?

1 个答案:

答案 0 :(得分:0)

永远不要强行推动公共分支。力意味着历史被重写。绝不是一个好的解决方案。有时需要恢复,但是当开发人员是一个并且没有人需要相同的分支时可以接受。

现在开发分支被覆盖,所有团队成员都需要拉远程开发分支。如果遥控器是正确的,我建议你和所有团队成员......

  • git checkout master
  • git branch -D develop
  • git fetch origin
  • git checkout develop

此序列将删除本地开发分支并将拉远程序。这是必要的,因为开发分支不再是你本地机器中的所有分支。