尝试重新定义HEAD指针时拒绝分支提示上的更新

时间:2012-11-12 23:07:22

标签: git

我想将HEAD指针重置为我之前的提交

$ git reset --hard HEAD~1

HEAD已移至上一次提交,但无法推送到我的原始主人

$git push origin master

! [rejected]        master -> master (non-fast-forward)
    error: failed to push some refs to 'https://github.com/username/repo.git'
    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.

如何移动指针并告诉Git更新更改?

2 个答案:

答案 0 :(得分:7)

默认情况下,Git不允许您在历史记录中推送服务器上没有最新更改的更改。这是为了避免问题,如果其他人已经拉过你以前的HEAD;然后你推送一些不是后代的东西意味着他们需要合并或重新定义你的新提交。

如果您知道没有其他人使用您的回购,或已与所有人沟通,那么您可以强行推动您的更改:

git push -f origin master

某些服务器配置为不允许强制更新。如果他们不这样做,您可以通过删除并重新创建分支来解决它:

git push origin :master
git push origin master

但是,如果您知道没有其他人将您的工作从您的工作中解脱出来,或者您可以与所有人沟通并确保他们在本地存储中正确地重置为之前的提交,那么只能执行这些操作。

答案 1 :(得分:0)

你必须告诉git强制推送,因为这将失去对遥控器的提交。这是一种安全机制,因此您不会无意中擦除工作。这也是一个方便的功能,您可以发出git push,并且所有为跟踪设置的分支都将在远程更新,但最终会删除某些提交的除外。