繁体   English   中英

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

[英]Problem trying to reset remote branch with git

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

在此处输入图像描述

如何删除远程上的最新提交?

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

我无法进行推送,因为我当前分支的尖端位于其远程分支的后面......

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

git push工作由:

  1. 让您的 Git 呼叫其他 Git;
  2. 如果需要,让你的 Git 给 Git 新提交;
  3. 用你的 Git 结束 session,礼貌地询问其他 Git:如果可以,请将你的分支 _____ 设置为提交 _____ (用分支名称和 hash ID 填写空白)。

你的 Git 将发送他们的 Git 没有提交(因为你对他们没有任何新东西),然后要求他们将他们的master设置为指向提交Rediseño del header y del overlay... (无论它的实际 hash ID 是什么,如在你的master )。

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

但这正是您希望他们的 Git 执行的操作:“丢失”该提交,以便它“被遗忘”并最终真正被删除。

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

这个强制命令有两个forms:

  • 如果您只运行git push --force origin master ,就会得到一个——不太小心的一个。 这只是发送命令:将你的master设置为_____! (通过在您自己的 Git 存储库中找到正确的 hash ID 来填空)。

  • 更谨慎的方法是git push --force-with-lease 这一个发送命令,但形式为:我认为你的master是_______。 如果是,将其设置为 ________,如果不是。 告诉我我错了我的想法。 Your Git fills in the first blank with what you have in your origin/master : the hash ID your Git remembers from the last conversation your Git had with their Git. Your Git fills in the second hash ID in the usual way.

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM