【问题标题】:git, how to overwrite commitsgit,如何覆盖提交
【发布时间】:2012-05-09 18:41:23
【问题描述】:

我搞砸了我的应用程序并最终做了一个

git checkout <commit number>

回到我想去的地方。

当我执行 git status 时,它会说

 Your branch is behind 'origin/master' by 5 commits, and can be fast-forwarded.

我想我在最近一次提交的第 5 天。有没有办法让我最近提交的第 5 个提交成为我最近提交的第 5 个?几乎要覆盖或丢弃我前四次提交中的所有内容?

更新。

我做了一个

git reset --hard <commit number>

但是我怎样才能推送到我的存储库?它说...

To prevent you from losing history, non-fast-forward updates were rejected

我不想执行合并,我非常想清除我最近的 4 次提交

谢谢

【问题讨论】:

标签: git


【解决方案1】:

您始终可以使用 -f 选项强制推送:

git push -f origin master

但当然要小心,因为这破坏历史。

还要确保同时指定远程和分支名称,因为没有它,默认情况下 git 将尝试强制将 所有 分支推送到给定(或上游)远程。

【讨论】:

    【解决方案2】:
    git reset --hard <commit number>
    

    【讨论】:

    • 我重置为我想要的版本。但是当我尝试执行 git push 时,它说.. 为了防止您丢失历史记录,非快进更新被拒绝。我非常想删除前 4 次提交或撤消所有内容
    【解决方案3】:
    git checkout ORIG_HEAD
    

    应该让您回到最近一次结帐后的位置。

    如果这没有帮助,您也可以查看git reflog。它会显示你最近的 rebase、checkout 等的列表,你可以找到你想要返回的提交的 SHA。

    【讨论】:

    • 别忘了 co 是 checkout 的别名
    猜你喜欢
    • 2016-06-03
    • 2018-08-27
    • 2017-06-23
    • 2014-10-03
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多