我在gitlab的分支<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
<div id="container">
<my-component :data=$data @click-me="clickMe"></my-component>
</div>
上做了merge request
。
然后我意识到自己犯了一个巨大的错误。
我迅速按下了develop
按钮,我认为这没事,不是。
Gitlab仅提交revert
次提交。在日志中,仍然有来自源分支的提交。这会导致许多版本问题。无论如何,任何解决方案都可以在gitlab平台上还原单个合并请求,并从许多不需要的提交中清除分支日志。我希望我的分支像此合并请求再也没有位置。
答案 0 :(得分:2)
首先创建一个新分支keepsafe
,以使所有这些更改仍然保留在某些地方,以防您搞砸。这将在本地“复制”当前状态,并将其保存在遥控器上。
git checkout -b keepsafe
git push
现在回去开发。 X
是您要删除的提交数。
git checkout develop
git reset --hard HEAD~X
git push -f
将本地硬重置为原始提交。 git push -f
将覆盖远程分支。所有提交都将消失。
请注意,GitLab允许管理员禁用强制推送(git push -f),因此,如果这不起作用,则需要与管理员联系。但是您可能还是应该这样做。
答案 1 :(得分:0)
您可以使用交互式基准库恢复到先前的提交。假设您想将HEAD还原为HEAD〜5(之前5次提交),则可以选择HEAD〜5的父级,即HEAD〜6,只需在其顶部应用HEAD〜5。
git rebase -i HEAD~6
在HEAD〜6到HEAD之间的每次提交都将被重写。假设HEAD〜5 SHA1是ABC,而HEAD〜6 SHA1是XYZ。当前的HEAD是PQR。我们需要从下面的编辑中删除其他提交,因为我们不想在HEAD〜6上重写它们。我们只想在HEAD〜6之上应用HEAD〜5。此文件中至少应有一个条目,否则rebase将终止。因此,我们在HEAD〜6之上应用HEAD〜5。
edit ABC reverting to state before merge
# Rebase XYZ..PQR onto XYZ
#
# 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
现在,发出以下命令来修改历史记录并输入提交消息。
git commit --amend
现在,发出以下命令以继续并退出编辑器
git commit --continue