git - 将 git 存储库重置为来自特定分支的特定提交

标签 git reset

我在一个处于以下状态的分支上工作

        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/

相关文章:

django - 使用 Git 开发 Django 项目

git - 是否可以从 Bitbucket pull 请求创建 Heroku 评论应用程序

windows - IntelliJ 升级到 Windows 8.1 后无法启动 Git

iphone - 重置 iOS 应用程序的推送通知设置?

javascript - 如何重置已使用 JavaScript 更改的 CSS 属性?

Git:如何在同一提交上有 2 个/更多标签时获取 checkout 标签的名称

linux - 我怎样才能恢复 git 提交但保留最原始的 git 提交历史(在 git blame 中)

jQuery:取消设置/删除函数事件的最佳实践?

javascript - 通过获取表单 ID 重置表单字段

javascript - CodeIgniter 没有破坏我的 session