尝试使用 git 重置远程分支时出现问题

Problem trying to reset remote branch with git

我在origin/master后面有我想使用的master分支。如何删除远程上的最新提交?我无法进行推送,因为我当前分支的尖端在其远程分支的后面,但我不想合并两者。

How can I delete the latest commit on remote?

从技术上讲,你不能——但你 可以 使另一个 Git 的 master 指向最后一个之前的提交。这将使另一个 Git “忘记”最新的提交。该提交将 最终 被删除,只要另一个 Git 开始执行 运行 维护命令。这已经足够好了,只要没有其他人重新引入该提交即可。 (其他任何人都可以同时从该服务器获取提交。)

I cannot do a push because the tip of my current branch is behind its remote counterpart ...

您可以并且通常必须进行推送。你需要告诉你的 Git 是以命令的形式发送它的最终请求,而不是礼貌的请求。

A git push 作品作者:

  1. 让你的 Git 调用其他 Git;
  2. 让您的 Git 在需要时提供 Git 新提交;
  3. 结束会话,你的 Git 礼貌地询问其他 Git:如果没问题,请将你的分支 _____ 设置为提交 _____(用分支名称和哈希ID填空)。

您的 Git 将发送他们的 Git 无提交(因为您对他们没有任何新内容),然后要求他们将他们的 master 设置为指向提交 Rediseño del header y del overlay ...(无论它的实际哈希 ID 是什么,都可以在您的名字 master 中找到)。

他们会说 ,他们说不的原因——他们也传递了这一点——是:如果我这样做,我将失去访问权限到主题为“Cabiados componentes y header” 的提交(无论其哈希 ID 实际是什么)。这种拒绝采用 rejected (non-fast-forward) 的形式,这意味着 我可能会丢失一些提交

但这正是您想要他们Git做的:“丢失”该提交,以便它“被遗忘”并最终被删除真实。

那么,您需要做的就是停止礼貌地询问。向他们发送一个强制命令:设置你的 master! 他们 可以 仍然拒绝,但如果你有允许这种类型的权限强推,他们会服从,并失去提交。

这个强制命令有两种形式:

  • 一个——不太细心的那个——就是你 运行 git push --force origin master 得到的结果。这只是发送命令:Set your master to _____!(通过在您自己的 Git 存储库中找到正确的哈希 ID 来填充空白).

  • 更谨慎的做法是git push --force-with-lease。这一个发送命令,但格式为:我认为你的 master 是 _______。如果是这样,请将其设置为 _______!如果不是,请告诉我我的想法是错误的。 你的 Git 用你的 origin/master 中的内容填充第一个空白:你的 [=105] 的哈希 ID =] 记得你的 Git 与他们的 Git 的最后一次谈话。您的 Git 按照常规方式填写第二个哈希 ID。

    如果没有其他人向另一个 Git 存储库添加任何 new 提交,您的 origin/master 仍将匹配他们的 master。如果 --force-with-lease 失败 ,这意味着其他人可能利用了您试图丢弃的提交;您应该 git fetch origin 获取新的提交,并与其他人进行实际的人与人之间的对话,以弄清楚该怎么做。

如果您知道没有其他人在使用另一个 Git 存储库,或者至少是 Git 存储库中的 分支 ,则 git push --force master 就足够了。如果您不确定,最好先 与其他用户协商,即使您打算使用 --force-with-lease 选项以确保安全。