如何删除我在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中删除了,但它仍然存在。
还有另一个命令吗?
答案 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中的提交。