删除未推送的git提交

hap*_*497 617 git

我做了一个,git commit但我还没把它推到存储库.所以,当我这样做时git status,我得到'#你的分支在'提交'之前领先于'master'.

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

git reset --hard eb27bf26dd18c5a34e0e82b929e0d74cfcaab316
Run Code Online (Sandbox Code Playgroud)

鉴于我什么时候git log得到:

commit eb27bf26dd18c5a34e0e82b929e0d74cfcaab316
Date:   Tue Sep 29 11:21:41 2009 -0700


commit db0c078d5286b837532ff5e276dcf91885df2296
Date:   Tue Sep 22 10:31:37 2009 -0700

Bri*_*ell 587

其实,当你使用git reset,你应该指的是承诺,你是复位 ; 所以你可能想要db0c078提交.

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

当你做任何事情时要小心git reset --hard,因为你可能会丢失任何未提交的更改.您可能需要检查git status以确保您的工作副本是干净的,或者您确实想要吹走那里的任何更改.

此外,您可以使用origin/master@bdonlan在评论中的建议,而不是HEAD 作为参考:git reset --hard origin/master

  • 或者`git reset --hard origin/master`,将其重置为原点所在的位置. (338认同)
  • 读者,在你'git reset`你的代码之前.你的未来是一个帮助:`reset`,`reset --soft`和`reset --hard`之间的区别(你早期的`git add`又名"你的工作"会发生什么:)图片:[link] (/sf/ask/246977181/) (10认同)
  • 注意:使用`git reset --hard HEAD ^`时要小心,因为您将丢失提交文件中的更改(更改将被删除)。这个问题有两个分支:要还原提交但仍在磁盘上进行更改,请执行git reset --soft HEAD〜1 (9认同)
  • 请注意,这将删除您要删除的提交中的所有内容(因此,“ git status”将不显示任何更改,并且提交将被删除/更改丢失)。 (2认同)

jku*_*ila 554

如果您没有将更改推送到远程

git reset HEAD~1
Run Code Online (Sandbox Code Playgroud)

检查工作副本是否清洁git status.

您已将更改推送到远程

git revert HEAD
Run Code Online (Sandbox Code Playgroud)

此命令将恢复/删除最后一次提交/更改,然后您可以推送

  • 这回答"删除未被推送的最新git提交"(最接近的答案恕我直言) (26认同)
  • 此外,它保持在上次提交中完成本地更改,而git reset --hard则不会 (23认同)
  • 对我来说,它将撤消最后推送的提交和未推送的提交 (2认同)
  • git revert HEAD 对我来说刚刚删除了我准备推送的所有文件。当心! (2认同)

Sha*_*bob 147

git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

将其重置为原点所在的位置.

这是由@bdonlan在评论中发布的.我为没有阅读评论的人添加了这个答案.

  • 当我急于寻求答案时,我通常不会阅读评论...感谢您提出答案(一个有效的简单答案) (9认同)
  • 大约5年前就提出了这个问题,这已经是其中一条评论. (4认同)

pap*_*gee 48

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

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

git reset --hard HEAD~1

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

git reset --soft HEAD~1

这个(后面的命令)将带你进入你曾经做过的状态git add.

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

git reset

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


mar*_*han 38

只需键入控制台:

$ git reset HEAD~
Run Code Online (Sandbox Code Playgroud)

  • 你能解释一下你的答案对现有答案的补充吗? (6认同)
  • 这会在推送之前清除当前提交 - 不会恢复您在本地所做的更改 - 就像其他答案一样 - 这可能是一个严重的脱发时刻 (2认同)
  • 简短而甜蜜;我喜欢!我们需要更多这样的答案,这就是对现有答案的“添加”。减去可能是对此答案值的更好解释。我希望可怜的灵魂不会使用任何——硬噪音。 (2认同)

小智 26

在推送之前删除最后一次提交

git reset --soft HEAD~1

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

  • 嗨Karina,提到`--soft`是可能的答案的很好的补充,但你还能提到为什么?解释您的解决方案总是有帮助的.也试着坚持用英语.谢谢 (3认同)
  • `--soft` - 确保您不会丢失您尝试撤消其提交的文件中的更改 (3认同)

小智 18

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

git reset --hard {commit-id}
Run Code Online (Sandbox Code Playgroud)

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

git reset --hard db0c078d5286b837532ff5e276dcf91885df2296
Run Code Online (Sandbox Code Playgroud)

  • 只是对像我这样的新手的警告 - 备份您想要保留更改的任何文件,因为它们将恢复到早期版本。我的情况是我不小心将数据库转储放在我的 repo 目录中然后提交 - 我显然不想将这些文件提交到 repo 但 DID 想要保留我对其他文件所做的更改。因此,我必须从在执行 git reset 之前所做的备份中复制并粘贴所需的更改。 (2认同)

Adn*_*nan 10

这就是我做的:

首先检查你的分支(对于我的案例master分支):

git checkout master
Run Code Online (Sandbox Code Playgroud)

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

git reset HEAD^ --hard && git clean -df && git pull
Run Code Online (Sandbox Code Playgroud)


M. *_*ula 8

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

1-撤消提交并保留所有文件的暂存状态: git reset --soft HEAD~;

2-撤消提交和取消登台所有文件: git reset HEAD~;

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

这是我找到答案的地方

  • 注意 `git reset HEAD~` 删除您创建的所有文件 (3认同)
  • 如果您在自定义分支中工作: git reset --soft origin/{Branch} (2认同)