无法删除REMOTE上的最后一次提交

时间:2014-08-05 08:20:07

标签: git

在此之前,我想强调一点,我是唯一一个在存储库上工作的人。

基本上,我在本地分支eb066742上提交了一个devel并将其推送到origin/devel。然后我记得我在提交中留下了一些东西,所以我做了一些更改,然后是git add -ugit commit --amend

现在一切都搞砸了。我无法git push

 ! [rejected]        devel -> devel (non-fast-forward)
error: failed to push some refs to 'abcd.com'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Merge the remote changes (e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

git push -f

Counting objects: 13, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 836 bytes | 0 bytes/s, done.
Total 7 (delta 6), reused 0 (delta 0)
remote: To prevent you from losing history, non-fast-forward updates were rejected.
remote: Merge the remote changes (e.g. 'git pull') before pushing again.  See the 'Note
remote: about fast-forwards' section of 'git push --help' for details.
To abcd
 ! [remote rejected] devel -> devel (pre-receive hook declined)
error: failed to push some refs to 'abcd'

如果我尝试使用git push remote +HEAD^:devel删除origin / devel上的最后一次提交,我会得到与上面类似的错误。

我该怎么办?

我只想删除origin上的最后一次提交以及推送我当前(修改)的提交。

3 个答案:

答案 0 :(得分:1)

我用了一个肮脏的黑客。删除原点上的分支,然后重新添加它。不确定这是否是最好的解决方案,但它确实有效。

答案 1 :(得分:1)

  

[远程拒绝] devel - > devel(预先接收挂钩拒绝)

即使您使用-f(或--force),远程也会有一个拒绝非快进更新的预接收挂钩。您需要禁用挂钩才能推送修改后的提交。

挂钩位于文件夹.git/hooks中,要禁用它,您需要重命名它或将其从文件夹中完全移出。您可以在此处了解有关git hooks的更多信息:http://git-scm.com/book/en/Customizing-Git-Git-Hooks

答案 2 :(得分:0)

您可以使用--force强制进行更改... 但要小心,这很危险。

确保这是你真正想做的事情。然后仔细检查。

并且永远不会养成使用--force的习惯......如果你必须经常使用它......那么这是一个很好的指标,表明其他错误并且应该修复(可能是你的处理)。