【问题标题】:Revert commit on remote branch without force pushing在不强制推送的情况下恢复远程分支上的提交
【发布时间】:2016-06-23 11:41:40
【问题描述】:

如何在不强制推送和丢失历史记录的情况下将某个远程存储库恢复为旧提交?我知道我能做到

git reset --hard <commit-hash>
git push -f origin master

但我没有强制推送的权限,我也不想丢失历史记录。

我想这样做是因为我将一些 **** 推送到我的主分支中,并且自动部署从该分支部署到生产环境。我通过创建一个新分支并将部署设置更改为使用该分支来解决它,但是如果发生这种情况,是否有任何选项可以将远程存储库的当前状态设置为旧提交?

【问题讨论】:

标签: git version-control continuous-integration continuous-deployment


【解决方案1】:

您可以对所有 n 次提交使用 git revert &lt;commit&gt;…,然后像往常一样推送,保持历史不变。

https://git-scm.com/docs/git-revert

【讨论】:

  • 好的,但是 git revert 会创建一个我并不真正需要的新提交,并且在一段时间后删除这个我还必须强制推送,或者还有其他可能获得当我再次需要它时返回还原的提交?
  • @bpoiss,不用强制的解决方案是使用git revert,它添加了一个新的提交。您删除提交的任何解决方案,例如通过git reset --hard 或类似的,将需要强制推送。
  • 是的,但这给了我一个额外的提交,难道不可以只将 HEAD 设置为旧提交而不使用 git revert 进行新提交吗?
  • @bpoiss,您可以通过强制推送来实现。根据您使用的服务器,您可能可以使用git reset --hard 或类似方法直接在服务器上执行此操作,但效果将与强制推送完全相同。 (你对强制推送保持警惕是正确的。它可能会导致复杂化,尤其是在共享存储库的情况下。)
  • @bpoiss 请注意,分支历史中的每一个更改都需要强制推送。为了防止更改历史记录(从而确保不需要强制推送),您需要将更改添加为新提交。
【解决方案2】:

正如上面评论中添加的那样。

查看此内容以获取完整的详细信息:

How to move HEAD back to a previous location? (Detached head)


还有git revert,上面帖子中没有描述。

git revert &lt;commit&gt;

git revert 只是撤消所需的提交,并通过添加一个新的“revert”提交来撤消对此 repo 所做的更改。

【讨论】:

  • 提示:更新被拒绝,因为您当前分支的提示落后于提示:其远程对应项
猜你喜欢
  • 2014-07-25
  • 2018-11-01
  • 2018-03-29
  • 2023-03-23
  • 1970-01-01
  • 2022-01-15
相关资源
最近更新 更多