删除gitlab上的提交

删除gitlab上的提交,git,gitlab,Git,Gitlab,如何删除我在GitLab上所做的提交?我做出的这一承诺现在已经不是头了 如果我不能删除它,我可以编辑吗 当它是头的时候,我试着: git reset --soft HEAD git reset --soft HEAD^1 git revert HEAD git rebase -i HEAD git rebase -i HEAD~1 git reset --hard HEAD git reset --hard Id-Code 我已经试着给它重新定基,但它仍然留在树枝上。现在我刚把

如何删除我在
GitLab
上所做的提交?我做出的这一承诺现在已经不是头了

如果我不能删除它,我可以编辑吗

当它是头的时候,我试着:

git reset  --soft HEAD

git reset  --soft HEAD^1

git revert HEAD

git rebase -i HEAD

git rebase -i HEAD~1

git reset --hard HEAD

git reset --hard Id-Code
我已经试着给它重新定基,但它仍然留在树枝上。现在我刚把它从头上取下来,但它仍然在那里


有另一个命令吗?

如果您有以下情况:

* 1bd2200 (HEAD, master) another commit
* d258546 bad commit
* 0f1efa9 3rd commit
* bd8aa13 2nd commit
* 34c4f95 1st commit
要删除d258546的位置,即“错误提交”

您应该尝试使用交互式rebase将其删除:
git-rebase-i 34c4f95

然后,您的默认编辑器将弹出如下内容:

 pick bd8aa13 2nd commit
 pick 0f1efa9 3rd commit
 pick d258546 bad commit
 pick 1bd2200 another commit

 # Rebase 34c4f95..1bd2200 onto 34c4f95
 #
 # Commands:
 #  p, pick = use commit
 #  r, reword = use commit, but edit the commit message
 #  e, edit = use commit, but stop for amending
 #  s, squash = use commit, but meld into previous commit
 #  f, fixup = like "squash", but discard this commit's log message
 #  x, exec = run command (the rest of the line) using shell
 #
 # These lines can be re-ordered; they are executed from top to bottom.
 #
 # If you remove a line here THAT COMMIT WILL BE LOST.
 #
 # However, if you remove everything, the rebase will be aborted.
 #
 # Note that empty commits are commented out
只需删除包含要剥离并保存的提交的行,然后退出编辑器:

 pick bd8aa13 2nd commit
 pick 0f1efa9 3rd commit
 pick 1bd2200 another commit
 ...
git将继续从您的历史记录中删除此提交,并留下类似的内容(请注意删除的提交的提交子体中的哈希更改):

现在,因为我假设您已经将错误提交推送到gitlab,所以您需要将图形重新推送到存储库(但是使用
-f
选项以防止它由于不可快速转发的历史记录而被拒绝,即
git push-f

请格外小心,并确保没有同事已经在其分支中使用包含“错误提交”的历史记录

可选选项:

您不必重写历史记录,只需创建一个新的提交来否定错误提交所带来的更改,只需键入
git revert
。此选项可能不那么干净,但更安全(如果您不完全了解如何使用交互式重基)

  • git重置——硬提交
  • git-push-f原始主机
  • 第一个命令将把您的头放在commitid上,第二个命令将删除主分支上提交id之后的所有提交

    注意:不要忘记在push中添加-f,否则它将被拒绝


    我们也遇到过类似的问题,仅删除提交并强制推送到GitLab是不够的。
    它仍然可以在GitLab界面中使用url:

    https://gitlab.example.com/<group>/<project>/commit/<commit hash>
    
    https://gitlab.example.com///commit/
    

    我们必须从GitLab中删除项目并重新创建它,以在GitLab UI中消除此提交。

    您是否将提交推送到GitLab服务器?正如他在下面回答后的评论中提到的@lvaro-p,您需要强制(-f)当您推送时,还要确保分支在GitLab中不受保护。大多数解决方案并不意味着在本地repo更改后强制推送。我无法执行--强制推送GitLab,即使具有维护者权限
    git push origin master--强制计数对象:5,完成。
    使用最多4个线程进行增量压缩。
    压缩对象:100%(5/5),完成。
    写入对象:100%(5/5),1.02 KiB | 131.00 KiB/s,完成。
    总计5(增量0),重用0(增量0)
    远程:GitLab:不允许您强制将代码推送到此项目上受保护的分支。
    因此GitLab仍然没有解决方案,因此肯定会建议使用
    git revert
    。比起重写历史(这在设计上是很困难的),工作更少,也更安全。当然,这是假设没有推送敏感信息。@mhery那么第一个选项就是您想要的。请确保在推送之前仔细检查所有提交是否有序,因为
    git push-f
    是永久的且不可逆的。要将其从gitlab服务器中删除,您需要推送分支。请记住设置
    -f
    (即强制)选项,否则将被拒绝。(由于您使用的是gitlab,因此应确保您的分支不受强制推送的保护;在这种情况下,您或您的存储库主控程序应在强制推送之前取消激活存储库设置中的“受保护分支”切换)。这将从分支的历史记录图中删除提交,从而有效地将其孤立,但不会完全删除提交-如果您知道提交哈希,您仍然可以在Gitlab的web界面上找到提交,即使它没有包含在任何分支或标记中。如果打开的合并请求记得它在强制推送之前包含提交,则至少是这种情况。我不确定在没有合并请求的情况下,提交是否会保留在分支中,但我不想冒这个险,因为Unobian是对的。提交仍在GitLab中。即使运行“内务管理”也不会删除它“在当前存储库中运行许多内务管理任务,例如压缩文件修订和删除无法访问的对象。”我怀疑这是因为它仍然与管道链接,因此,它并非真的无法访问。请记住在推送中添加-f,否则它将被拒绝。此响应无法解决OP所述的问题。您的解决方案将在任意提交后删除所有提交,但不会仅删除一个不再在分支提示中的提交。注意!!这将删除所有更新和提交+1。请注意,如果主分支在Gitlab上受保护,那么您可能需要临时取消对其的保护,以便(2)正常工作,即使在运行其内部管理工具之后。。。我决定不使用这种方式,因为不知道正确的散列是无法找到的。让我来到这个页面的有趣的事情是:升级MacOs后,在我的第一次提交中,我通过IntelliJ框再次添加git用户名和电子邮件。我太快了,习惯性地输入我的用户名和。。。我的密码,我与其他帐户一起使用的密码(但2FA未启用)和解锁我的MacBook。。。因此,在GitLab UI中,您可以跳过与我的提交相关的图标,只需查看“mailto:MYPASSWORD”即可
    https://gitlab.example.com/<group>/<project>/commit/<commit hash>