从源中删除提交

时间:2019-07-24 00:03:32

标签: git gitlab

当我打算克隆一个项目并设置一个新的原点时,我不小心将我的原点提交给了我。我已经恢复了要保留的存储库中的更改,但是无法将其推入原始记录。

$ git log --pretty=oneline --format=%h

dff98f5
2e97c31
31b8b73
460fae6
c589d7a
edbda48

$git reset --hard 460fae6

On branch master...

这是行不通的

git push --force origin master

! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@gitlab.com:username/projectname.git'

如何更新我的Gitlab存储库? (我在网站上没有看到任何UI选项。)

2 个答案:

答案 0 :(得分:4)

有一个古老的故事,魔术师叫守护程序来保护他的东西(魔杖,药水,无论它是什么)。他告诉守护程序他要离开几天,守护程序应该吃掉所有回到他家的人。

三天后,魔术师回到他的房子,守护进程把他吃了。

您已经在Gitlab存储库中编写了一个更加友好的守护程序(一个 pre-receive hook )。您告诉它禁止任何试图从存储库中删除提交的人。您尝试使用git push --force从存储库中删除提交。您的守护程序阻止了您这样做。

如果您现在想这样做,则应该删除守护程序,或者使其更智能。不要只吃任何人,也要吃不是你的人。

答案 1 :(得分:2)

您说您恢复了更改,但是您使用的命令是reset;您从分支中删除了提交,而不是还原它们。另一种选择是实际还原它们,创建新的提交以撤消不需要的提交。您可以使用revert命令来做到这一点:

git revert 460fae6..dff98f5

那样,无需强制推送,您只需添加更多提交即可。如果其他人正在与您合作进行回购,那么这可能就是您要走的路。