git - 重置为旧版本,尝试推送它

时间:2013-01-11 07:43:12

标签: git

git status给了我这个:

  

您的分支机构在11个提交后面位于“origin / network”之后,可以快速转发。

这是因为我重置为早期版本(希望放弃我之后所做的所有事情)。

但是,如果我尝试推送该版本(或该版本稍作修改),则无效。 我不想要新的东西,我只是想用旧版本重新开始新版本!

我该怎么办?

2 个答案:

答案 0 :(得分:3)

如果您是存储库的唯一用户,则可以强制推送;但是如果其他人已经从回购中撤出,你不应该强行推动,因为它会搞砸其他人的历史。

您可以git merge --ff-only origin/network然后git revert HEAD~11或类似的东西生成一个撤消过去11次提交的新提交,而不会更改提交历史记录。

另见this answer to a similar question

答案 1 :(得分:2)

由于您已经推送了“未来”代码,因此如果您有其他贡献者,则希望不惜一切代价避免重写历史记录。你会引入相当严重的更新噩梦。

如果您知道其他人没有提取最新代码,您可以执行以下操作以在特定点“重新创建”分支。以下内容将重写network分支的历史记录。

git reset --hard <commit-id>
git push --force origin network

如果您不想重写历史记录(您应该始终避免重写推送历史记录),则可以“恢复”network分支上的最后11次提交。 在HEAD分支的network上完成以下操作。

git revert OLDER_COMMIT^..NEWER_COMMIT

这有效地创建了“恢复”现有提交的提交。虽然您可能会发现自己遇到麻烦,但如果您稍后将此分支合并到另一个分支中并希望保留现有的11个提交以用于合并分支。 请参阅:Revert Multiple git commits的答案。

您还可以在一次提交中恢复11次提交。

# reset your network branch to be the same as the remote
git reset --hard origin/network

# Set your branch (soft) index to the commit point you want your branch state to have:
git reset --soft <commit-id>

# The index will change and the files will reflect a difference you can now commit:
git commit -a