在此之前,我想强调一点,我是唯一一个在存储库上工作的人。
基本上,我在本地分支eb066742
上提交了一个devel
并将其推送到origin/devel
。然后我记得我在提交中留下了一些东西,所以我做了一些更改,然后是git add -u
和git 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
上的最后一次提交以及推送我当前(修改)的提交。
答案 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
的习惯......如果你必须经常使用它......那么这是一个很好的指标,表明其他错误并且应该修复(可能是你的处理)。