我想重置为特定的提交。我使用命令git reset --hard Head~5
这已经重置我的本地。我做了一些改变,现在我想推。但是我得到Updates were rejected because the tip of your current branch is behind
。我不想拉,否则我回到最近的提交。我该如何重置?
答案 0 :(得分:3)
你可以强行推,但这可能会有问题。
还有其他人在处理这个回购或者只是你吗?你绝对确定要从遥控器上删除这些提交吗?
git push -f origin branch-name
会更新远程分支以匹配您刚才所做的更改。
但是这样做时你需要小心。如果你有同事在同一个分支上工作,你应该告诉他们,以防他们已经引入了这些变化。此外,他们可能推动了其他一些你无法改变的变化。
答案 1 :(得分:3)
您需要执行git push --force
(并非总是可行,请参阅下文)。
如果您没有获得推力的许可,则意味着您无法重置提交,而是尝试reverting。
请注意,如果分支是主要的开发分支,或者它已经被其他开发人员提取,那么重置提交并推送它们(无论权限问题如何)都是一件危险的事情,而git revert
将是一个更好的选择。
这是你的例子(git reset --hard HEAD~5
)的git revert等价物:
git revert Head~5..HEAD
这将还原HEAD~4
,HEAD~3
,...和HEAD
所代表的提交。它将保留您现有的提交,然后在顶部添加额外的还原提交。每次恢复提交将有1个恢复提交,在您的情况下最多可添加5个恢复提交。
如果您更喜欢自己管理提交(例如,将它们全部恢复为1次提交而不是5次),请使用-n
选项,以便在不提交的情况下还原本地分支中的更改:
git revert -n Head~5..HEAD
然后,由您来决定在当地分支机构中进行未完成的更改。
当您重置尚未推送的本地提交时, git reset
是安全的。如果你有推力许可,并且你绝对确定没有其他人撤回你即将重置的提交,你可以在本地重置它们,然后再推力。
对于已推送的提交,git revert
比git reset
更安全,因为您不会更改历史记录,也不会删除其他团队成员已经提取和依赖的提交。请注意,如果在还原期间事情失控(例如,您遇到冲突,而您不确定如何解决),您可以随时通过git revert --abort
中止操作。有关详细信息,请参阅git revert documentation page。