【问题标题】:How to delete commits from gitlab? (Git-revert not working)如何从 gitlab 中删除提交? (Git-revert 不工作)
【发布时间】:2019-12-28 18:57:26
【问题描述】:

我正在尝试删除一些错误的 gitlab 提交。

其他帖子中提供的答案是

  1. 点击提交名称
  2. 点击“选项”
  3. 点击“还原”

当我尝试删除提交时,它们并没有被删除。相反,在顶部创建了两个额外的合并。我确定这是正常的,但我不明白它为什么这样做,更重要的是,它没有删除提交。

我怎样才能完全删除提交,以便最后一个可用的提交是带有超人标志的提交?谢谢

【问题讨论】:

  • 您是否期望还原操作会删除提交?因为它不是它应该做的。原理实际上是创建新的提交来否定给定“坏”提交的影响。您可能误解了还原/重置背后的原理。
  • 有没有办法简单地删除它们?
  • 尝试重置并强制推送。我不知道 gitlab web UI 是否有办法做到这一点。
  • @NickyLarson 这取决于分支是否共享。如果它,请进行重置/强制推送。如果你一个人在做这件事,那就是要走的路。
  • 通过“共享”,@RomainValeri 的意思是:在这个分支上工作的人不仅仅是你吗?因为我们可以看到至少有两个名称附加到那里的提交,所以答案可能是“是”,在这种情况下它可能不像简单的重置那么容易。

标签: git github gitlab git-commit git-revert


【解决方案1】:

非破坏性的方法就是做你已经做过的事情:恢复你的提交。当然还有“2 个以上的提交”,但是您的分支与以前的状态相同

破坏性的方法是删除提交,但这会覆盖您的分支历史记录。因此,您需要额外的权限来重写分支历史记录。

在更进一步之前,您需要了解:

  • 根据存储库配置,您可能不允许这样做
  • 您将强制在此存储库上工作的其他所有人强制拉取分支,因此如果他们不了解该过程,他们可能会失去工作
  • 在超人提交之后,您将丢失每一次提交,即使是其他人在过去几个小时内创建的提交也是如此

我强烈建议您不要这样做。

通过代码,假设这是分支master

# Retrieve the latest version
git pull origin master
# Goes back to the superman commit
git reset --hard 329a7a0e
# Force push to rewrite history
# Will be refused if the branch is protected
git push origin master --force

使用 Gitlab,我认为您别无他法:

  • 329a7a0e 提交创建一个新分支,命名为master-rollback
  • 删除master 分支
  • master-rollback 创建一个新分支master
  • 删除master-rollback 分支

【讨论】:

    猜你喜欢
    • 2017-07-09
    • 2015-02-03
    • 2018-09-13
    • 2018-01-02
    • 2020-12-31
    • 2021-04-11
    • 2011-04-01
    • 2018-07-19
    • 2015-09-02
    相关资源
    最近更新 更多