我在一个处于以下状态的分支上工作
A'--B'--C'--D'
/
A--B--C--D
发生了一些非常糟糕的事情,我不得不在本地和远程回到 B' 这样远程仓库就是下面的
A'--B'
/
A--B--C--D
对于我做的本地仓库
git reset --hard <sha>
但是我怎样才能为远程存储库做到这一点呢?
我应该可以做类似的事情
git push origin mybranch --reset
但它不在手册页中
我尝试创建一个提交来取消之前的提交但是
git 添加。
报告没有变化(因为我正好在上一次推送之后)
那么如何重置远程仓库呢?
最佳答案
要用您的分支覆盖跟踪的远程分支,请执行 git push origin --force mybranch
。 (或者使用-f
代替--force
,或者在分支名称前加上+
:git push origin +mybranch
.)
请注意,您应该警告任何可能更改了您的分支的协作者它已被远程更改,这样他们就不会覆盖它。因为 git push
在他们的副本上会为远程分支做快进——除非你至少对它做了一个新的提交,并且 git pull
不会更新他们的本地版本分店。合作者应该做的:
git fetch origin
git checkout mybranch
git rebase origin/mybranch
完整性更新:正如@CodeGnome 建议的那样,要完全删除现有的提交,请在包含它们的所有 Git 存储库上运行 git prune --expire now
。不过请注意,此命令将从 Git 中删除所有 悬挂对象,并且会阻止恢复您在运行它之前“丢失”的任何数据。通常没问题,但无论如何您都需要得到警告。
更新:作为this页面建议,git prune --expire now
不会清除引用日志中的提交。请参阅解决方案的链接。对于侵入性较小的解决方案,请尝试 git reflog expire --all mybranch
。您必须在运行 git prune
之前执行此操作。
有时更可取的是显式生成一个“撤消”提交以删除更改(因此旧版本及其删除的事实在历史中可见)。有一个 git revert
命令。
关于git - 将 git 存储库重置为来自特定分支的特定提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11255952/