Git:删除原始仓库和上游仓库中的提交

4

我的分支是 origin,我从中另一个分支派生出来的是 upstream

我需要从我的分支中删除一次提交,但我希望在其他人需要另一个分支派生时更新 upstream 仓库(目前只有我)。

到目前为止,我已经完成了以下工作:

git checkout MYBRANCH
git reset --hard <SHA_COMMIT_HASH>
git push origin MYBRANCH

目前我的upstream仓库已受保护(在某个时间点上会受到保护),因此我尝试将其推送到该仓库,但出现了以下消息。我尝试强制推送,但也没有成功。我再次检查了分支,发现它并未受到保护。

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.

如果 push -f 没有生效,那么分支或存储库受到保护并且强制禁用,否则它应该可以工作。 - Divisadero
如果使用Github企业版,那可能会有所不同。 - sdot257
@nak 是的,我想将它合并到上游,因为那是我分叉的地方,其他人也会这样做。 - sdot257
其他开发人员是否在使用MYBRANCH,还是只有你自己在使用? - nak
@nak 其他人会来的。我还在设置过程中,目前是这个仓库中唯一的开发人员。 - sdot257
显示剩余2条评论
1个回答

1
你已经重置了提交。您可以采用以下两种方法之一:
  1. 使用带租约的强制推送 - git push origin --force-with-lease MYBRANCH。这将覆盖提交并将其从远程中删除,但如果自上次拉取以来远程存储库已更新,则会被拒绝。在您的情况下(您的分支,只有您提交到存储库),这在技术上并不是必需的,但养成这个好习惯很好。
  2. 从MYBRANCH创建一个新分支。将其推送到远程并将其合并到MYBRANCH上游。

当涉及删除提交时,我通常遵循以下规则

删除提交可以通过以下两种方式完成

  1. git reset - 销毁提交,使您的远程分支和本地分支不同步
  2. git revert - 创建一个新的还原提交,可以轻松地将其推送到远程存储库

如果您正在本地分支上工作并且不与其他开发人员协作,请使用RESET。由于Reset会销毁提交,因此您的重置提交可能会在其他开发人员的存储库中可用,并且他可能会意外地再次推送它。

如果您正在协作分支上工作,请使用REVERT。在这种情况下,将添加一个新的还原提交。因此,即使有人提交了还原,还原也将覆盖它。

遵循这些规则将防止将来删除提交相关的任何问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接