【问题标题】:how to revert hard and commit to server again [duplicate]如何硬恢复并再次提交到服务器[重复]
【发布时间】:2018-06-14 11:27:34
【问题描述】:

我是 git 新手,这就是我所做的: 我已经有了带有 git hook 的工作 ngnix 服务器,我通过以下方式将我的项目推送到它:git push production master 命令。

现在我将我的set1 提交推送到服务器,后来我在我的计算机上硬恢复它,所以我尝试再次推送以前的版本:set0

我的服务器回复我:

To ssh://website/var/repo/site.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'ssh://root@website/var/repo/site.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.

我现在该怎么办?我想在服务器上恢复我的set1 更改。

我在服务器上的配置在post-receive 文件中: #!/bin/sh git --work-tree=/var/www/laravel --git-dir=/var/repo/site.git checkout -f

但没有活动的存储库。谢谢你的帮助!

【问题讨论】:

  • 'git push -f' 应该可以解决问题,但是在重写远程存储库中存在的历史记录时必须小心,在大多数情况下,这被认为是不好的做法。
  • git reset --hard overwrite git history 这样它就不允许你推送了。你必须强制推送到 git。使用git push origin master -f

标签: git


【解决方案1】:

显示错误是因为由于上次提交不匹配,您的本地分支现在与服务器不同步。

因此,如果您想在还原最后一次提交后推送,请使用以下命令:

git push 生产大师 -f

-f 表示强制推送,而不管提交哈希不匹配。

编辑:另外,您可以在推送之前使用 --force-with-lease 来更安全,即

--force-with-lease 有效地只允许您在没有其他人在此期间将更改推送到远程时强制推送。系上安全带是 --force。

如果您有兴趣进一步了解它,请阅读this同样的美丽解释

【讨论】:

  • 这是一个很好的解决方案,而且有效!谢谢
  • 另外很高兴知道我们必须更喜欢(并养成习惯)使用--force-with-lease 而不是-f--force,这增加了一个安全性,可以防止无意中丢失了其他开发人员推送的提交。
  • 如果您想更安全并认为git history 对您的使用很重要--force-with-lease。更新我的答案。
猜你喜欢
  • 2013-11-22
  • 2018-11-10
  • 2017-07-11
  • 2014-09-21
  • 2011-10-11
  • 2019-10-05
  • 1970-01-01
  • 2015-08-29
  • 1970-01-01
相关资源
最近更新 更多