git status
给了我这个:
您的分支机构在11个提交后面位于“origin / network”之后,可以快速转发。
这是因为我重置为早期版本(希望放弃我之后所做的所有事情)。
但是,如果我尝试推送该版本(或该版本稍作修改),则无效。 我不想要新的东西,我只是想用旧版本重新开始新版本!
我该怎么办?
答案 0 :(得分:3)
如果您是存储库的唯一用户,则可以强制推送;但是如果其他人已经从回购中撤出,你不应该强行推动,因为它会搞砸其他人的历史。
您可以git merge --ff-only origin/network
然后git revert HEAD~11
或类似的东西生成一个撤消过去11次提交的新提交,而不会更改提交历史记录。
答案 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