git - 如何删除github上的最新提交

标签 git github

我已经按照这些说明 (How can I remove a commit on GitHub?) 尝试了 rebase ,但似乎没有任何改变。

在我的工作系统计算机 A 上,我有最新版本的代码。我将它推送到我的存储库并回家了。

在这里,在家里的计算机 B 上,我最后一次更新代码是在几个月前。显然,我当天做了一两次更改(没什么重要的),因此发生了 merge 冲突。使用 github desktop 进行“获取”并尝试 merge ;由于不了解 merge 的工作原理,我搞砸了(原来 merge 没有包含很多需要的文件)......但直到为时已晚才知道。然后我尝试做另一个 github 桌面获取/pull ,这样一切都会同步,并且在我的家庭系统上工作后我不会再遇到这个问题。

然后我意识到我丢失了文件,而其他文件已经过时/搞砸了。

在 Github 上,如果我查看提交历史……正确的文件是一次提交。

我想做的就是清除我当前的本地存储库(无论如何都没有任何当前的好文件)并告诉 github 删除最近的提交。然后我将克隆并在家庭系统上重新开始。

但我一辈子都找不到删除 github 上的提交的方法。

编辑:鉴于@Alex Harvey 坚持认为链接的说明有效,我回到了链接。第一个答案没有运气(本地 repo 中没有任何改变)我选择了另一个有 800+ 赞成票的选项。我使用了命令:git push -f origin HEAD^:master

不幸的是,这从我的 github 存储库中删除了大约 100 个最近的提交。自从我上次将家用计算机与 github 存储库同步以来,它似乎删除了 github 上的所有提交——很多个月前。

帮忙吗?

EDIT2:明确地说,我的系统已经几个月没有被使用或同步到 github 存储库了。在过去的几个月中,唯一的本地提交是我所做的“merge ”提交,它开始了整个困惑。我怀疑退回一个提交然后强制推送会导致 github 存储库及时回到这个系统几个月前的样子。

EDIT3:我去了工作系统并执行了“git push origin master --force”并恢复了我的工作。

最佳答案

如果你真的想删除 GitHub 分支上的 HEAD(最新)提交,那么你可以这样做:

git checkout your_branch
git reset --hard HEAD~1
git push --force origin your_branch

但是(斜体可能还不够强调),大多数时候您不想使用这个选项。原因是删除 HEAD 提交然后强制推送有效地重写了 your_branch 的公共(public)历史。这反过来会给共享该分支的任何其他人带来问题。

如果您确定您是唯一使用此分支的人,那么硬重置可能是合理的。否则,我建议使用 git revert:

git revert HEAD

这实际上会在 your_branch 之上添加一个 提交,这将在功能上撤消之前的 HEAD 提交。即使分支由多个人共享,此选项也是安全的。

关于git - 如何删除github上的最新提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54453860/

相关文章:

git - 在我的第一次提交中,我无法推送更改,因为我的 github 中已经有 .gitignore 和 README.md,与本地不同

git - 如何删除 Github 和 Bitbucket 上的 git 提交

git - 支持 Git 子模块的 Git 最低版本

ruby - 让 bundler 使用 http : instead of git:?

git - git中如何将没有变化的分支 merge 到master分支?

Git: fork /远程/克隆概念

git - 查找 merge 分支的时间

git - git push --mirror 是否足以作为与 git-svn 一起使用的存储库的备份?

git - 如何 git merge Git 2.9 之前的不相关历史记录(--allow-unrelated-histories 不可用)

c# - 如何在没有连接字符串的情况下将 ASP.NET MVC 推送到 GitHub