删除gitlab上的提交

时间:2016-10-25 17:06:43

标签: git gitlab

如何删除我在GitLab上提交的提交?我做的这个提交现在不是HEAD。

如果我无法删除它,我可以编辑吗?

当它是HEAD时,我试过了:

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

我已经尝试过改造它,但它仍然留在分支上。现在我把它从HEAD中删除了,但它仍然存在。

还有另一个命令吗?

3 个答案:

答案 0 :(得分:24)

假设您有以下情况:

* 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将继续从您的历史记录中删除此提交,留下类似这样的内容(请注意已删除提交的提交后代中的哈希更改):

 * 34fa994 (HEAD, master) another commit
 * 0f1efa9 3rd commit
 * bd8aa13 2nd commit
 * 34c4f95 1st commit

现在,因为我认为您已经将错误的提交推送到gitlab,所以您需要将您的图表重新映射到存储库(但使用-f选项以防止它因非快速响应而被拒绝历史即git push -f <your remote> <your branch>

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

备选方案:

不是重写历史记录,您可以简单地创建一个新的提交来否定您的错误提交所引入的更改,只需键入git revert <your bad commit hash>即可。这个选项可能不那么干净,但更安全(如果你不完全清楚你在使用交互式rebase做什么)。

答案 1 :(得分:16)

  

1.git reset --hard CommitId

     

2.git push -f origin master

第一个命令会将你的头放在commitid上,第二个命令将删除master分支上的commit id后的所有提交。

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

答案 2 :(得分:2)

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

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

我们必须从GitLab中删除项目,然后重新创建它才能摆脱GitLab UI中的提交。