恢复到特定提交但不能推送

时间:2016-09-25 08:54:44

标签: git

我想重置为特定的提交。我使用命令git reset --hard Head~5这已经重置我的本地。我做了一些改变,现在我想推。但是我得到Updates were rejected because the tip of your current branch is behind。我不想拉,否则我回到最近的提交。我该如何重置?

2 个答案:

答案 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~4HEAD~3,...和HEAD所代表的提交。它将保留您现有的提交,然后在顶部添加额外的还原提交。每次恢复提交将有1个恢复提交,在您的情况下最多可添加5个恢复提交。

如果您更喜欢自己管理提交(例如,将它们全部恢复为1次提交而不是5次),请使用-n选项,以便在不提交的情况下还原本地分支中的更改:

git revert -n Head~5..HEAD

然后,由您来决定在当地分支机构中进行未完成的更改。

当您重置尚未推送的本地提交时,

git reset是安全的。如果你有推力许可,并且你绝对确定没有其他人撤回你即将重置的提交,你可以在本地重置它们,然后再推力。

对于已推送的提交,git revertgit reset更安全,因为您不会更改历史记录,也不会删除其他团队成员已经提取和依赖的提交。请注意,如果在还原期间事情失控(例如,您遇到冲突,而您不确定如何解决),您可以随时通过git revert --abort中止操作。有关详细信息,请参阅git revert documentation page