【问题标题】:Remove a git commit which has not been pushed移除一个没有被推送的 git commit
【发布时间】:2010-12-09 08:00:04
【问题描述】:

我做了一个git commit,但我还没有将它推送到存储库。 因此,当我执行 git status 时,我会得到 '# Your branch is ahead of 'master' 1 commit。

所以如果我想回滚我的最高提交,我可以这样做:

git reset --hard eb27bf26dd18c5a34e0e82b929e0d74cfcaab316

鉴于当我这样做时git log 我得到:

提交 eb27bf26dd18c5a34e0e82b929e0d74cfcaab316 日期:2009 年 9 月 29 日星期二 11:21:41 -0700 提交 db0c078d5286b837532ff5e276dcf91885df2296 日期:2009 年 9 月 22 日星期二 10:31:37 -0700

【问题讨论】:

标签: git


【解决方案1】:
git reset --hard origin/main

它适用于其他分支:

git reset --hard origin/master
git reset --hard origin/staging

将其重置为原点。

这是由@bdonlan 在comments 中发布的。我为不读 cmets 的人添加了这个答案。

【讨论】:

  • 这个问题是近 5 年前提出的,这已经在其中一个 cmets 中了。
  • 如果当前本地分支与master 不同,我应该使用origin/mybranch 吗?
  • 当我急于寻求答案时,我通常不会阅读 cmets...感谢您提供答案(一个简单的有效答案)
  • 警告:请注意,这将删除您现有的所有代码更改,git reset HEAD~ 除外,它只会将提交设置为代码
【解决方案2】:

我相信其中之一会满足您的需要

1 - 撤消提交并保持所有文件暂存: git reset --soft HEAD~

2 - 撤消提交并取消暂存所有文件: git reset HEAD~

3 - 撤消提交并完全删除所有更改: git reset --hard HEAD~

here is were I found the answer

【讨论】:

  • 如果您在自定义分支中工作:git reset --soft origin/{Branch}
【解决方案3】:

如果您尚未将更改推送到远程

git reset HEAD~1

通过git status检查工作副本是否干净。

否则,您已将更改推送到远程

git revert HEAD

此命令将还原/删除本地提交/更改,然后您可以推送

【讨论】:

  • 这回答“删除尚未推送的最新 git 提交”(最接近的答案恕我直言)
  • 另外,它会保留上次提交时完成的本地更改,而 git reset --hard 不会
  • 对我来说,它会撤消上次推送的提交和未推送的提交
  • git revert HEAD for me 刚刚删除了我准备推送的所有文件。小心!
  • 如何撤消git reset HEAD~1
【解决方案4】:

我只是遇到了同样的问题,最后做了:

git rebase -i HEAD~N

(N 是 git 显示的提交次数)

这会提示您的文本编辑器,然后您可以通过删除与其关联的行来删除您想要的提交。

【讨论】:

    【解决方案5】:

    其实,当你使用git reset时,你应该参考你正在重置的提交;所以你可能想要db0c078 提交。

    更简单的版本是git reset --hard HEAD^,重置为当前头部之前的上一个提交;这样您就不必复制提交 ID。

    当您执行任何git reset --hard 时要小心,因为您可能会丢失任何未提交的更改。您可能需要检查git status 以确保您的工作副本是干净的,或者您确实想清除那里的任何更改。

    此外,您可以使用 origin/master 作为参考,而不是 HEAD,正如 cmets 中 @bdonlan 所建议的那样:git reset --hard origin/master

    【讨论】:

    • git reset --hard origin/master,将其重置为原点。
    • 另一个可以重置的有用指针是 ORIG_HEAD 或其利用 reflog HEAD@{1} 的泛化(HEAD 的最后位置)。
    • 读者,在你git reset你的代码之前。帮您未来的自己一个忙:resetreset --softreset --hard 之间的区别(您之前的 git add 又名“您的工作”会怎样:)图片:link
    • 请注意,这将删除您要删除的提交中的任何内容(因此git status 将显示没有更改,提交将被删除/更改丢失)。
    • 注意:使用git reset --hard HEAD^ 时要小心,因为您将丢失已提交文件中的更改(您的更改将被删除)。这个问题有两个分支:要恢复提交但磁盘上仍有更改,请这样做git reset --soft HEAD~1
    【解决方案6】:

    只需在控制台中输入:

    $ git reset HEAD~
    

    此命令丢弃远程 HEAD 之前的所有本地提交

    【讨论】:

    • 你能解释一下你的答案比现有答案增加了什么吗?
    • 这会在推送之前清除当前提交 - 不会恢复您在本地所做的更改 - 就像其他答案一样 - 这可能是一个严重的头发拔出时刻
    • 短而甜;我喜欢!我们需要更多这样的答案,这就是在现有答案之上“添加”的内容。减法可能是对这个答案值的更好解释。我希望没有可怜的灵魂使用任何 --hard 噪音。
    【解决方案7】:

    这个问题有两个分支(回滚提交并不意味着我想丢失所有本地更改):

    1.要恢复最新提交并放弃已提交文件中的更改,请执行以下操作:

    git reset --hard HEAD~1

    2. 要恢复最新提交但保留本地更改(在磁盘上),请执行以下操作:

    git reset --soft HEAD~1

    这个(后面的命令)会将您带到您执行git add 时的状态。

    如果您想在此之后取消暂存文件,请执行

    git reset

    现在您可以在添加然后再次提交之前进行更多更改。

    【讨论】:

      【解决方案8】:

      删除推送前的最后一次提交

      git reset --soft HEAD~1

      1表示最后一次提交,如果要删除两个last使用2,以此类推*

      【讨论】:

      • 嗨,Karina,提到--soft 是对可能答案的很好补充,但您能否也提一下为什么?解释您的解决方案总是有帮助的。也尽量坚持英语。谢谢
      • --soft - 确保您不会丢失要撤消其提交的文件中的更改
      【解决方案9】:

      这就是我的工作:

      首先检查您的分支(对于我来说是master 分支):

      git checkout master
      

      然后重置为远程 HEAD^(它将删除所有本地更改),强制清理并拉取:

      git reset HEAD^ --hard && git clean -df && git pull
      

      【讨论】:

      • 这是非常核选项。我建议软重置为有限提交。
      【解决方案10】:

      如果您的本地分支在远程之前多次提交并且您需要取消所有提交,则一种方法是删除本地分支并从服务器签出该分支。

      【讨论】:

      • 绝妙的答案 - 它允许在 sourcetree 中轻松点击它:)
      【解决方案11】:

      我经历过与下面相同的情况,因为这更容易。 通过传递commit-Id,您可以到达您想要进行的特定提交:

      git reset --hard {commit-id}
      

      由于您要删除上一次提交,因此您需要将 commit-Id 传递到您需要移动指针的位置:

      git reset --hard db0c078d5286b837532ff5e276dcf91885df2296
      

      【讨论】:

      • 只是对像我这样的新手的警告 - 备份您想要保留更改的任何文件,因为它们将恢复到早期版本。我的情况是我不小心在我的 repo 目录中放置了一个数据库转储然后提交 - 我显然不想将这些文件提交到 repo,但我想保留我对其他文件所做的更改。所以我不得不从我在执行 git reset 之前所做的备份中复制并粘贴所需的更改。
      猜你喜欢
      • 1970-01-01
      • 2011-07-16
      • 2019-08-10
      • 1970-01-01
      • 2017-11-18
      • 2015-09-04
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      相关资源
      最近更新 更多