如何在git推送后取消git提交?

时间:2012-01-03 17:58:50

标签: git

从这里http://blog.prabir.me/post/Undo-in-Git.aspx,它说

This undo’s your commit and also resets your working tree to the last commit.

1 git reset --hard HEAD^

但是,在我做了一个' git push'

之后,我怎么能不做我的最后一次提交呢?

谢谢。

当我执行' git log'时,我得到了我的最高提交

commit 29fc764693a5933a379169e22891e4b0d3d2426f
Merge: 002db49 cfb1d8f

我怎样才能恢复'改变了吗?

我明白了

$ git revert HEAD 
fatal: Commit 29fc764693a5933a379169e22891e4b0d3d2426f is a merge but no -m option was given.

3 个答案:

答案 0 :(得分:9)

您可以使用git revert HEAD生成新提交,这将撤消先前提交中的更改。看here。但请注意,提交和还原提交都将显示在历史记录中。

编辑:正如KingChrunch所提到的,当还原合并提交时,您需要指定要还原到哪个父级,因此添加-m <parent>。当然,只需按照我发布的链接就可以告诉你。

您不能(实际上不应该)修改共享存储库的历史记录。如果您倾向于修改历史记录(请不要),则可以git reset使用git push --forcegit rebase

答案 1 :(得分:2)

你应该git revert提交。

你也可以在git push --force之后git reset分支,但如果有人在此之前撤了你的分支,那么你的历史就会分歧,所以你真的不应该这样做。

答案 2 :(得分:0)

如果你正在使用GitLab和代码审查/合并请求步骤,那么就找到一个更简单的方法。在我意外地在提交和放置中包含一个不必要的文件之后找到了这个。推。您还可以使用此方法进行编辑,并在合并之前将它们重新发送到您的分支。

我们的流程:编码完成后,我们提交,从上游获取,rebase,推送到GitLab。这会在GitLab上创建一个分支,然后我们为该分支创建一个合并请求。这是为了确保所有代码在进入主分支之前获得对等方的代码审查。在这种情况下,这是一个非常有用的步骤,因为我的同行评审同事发现了我的傻瓜。

注意:这只是在接受合并请求之前的选项。

在推送到GitLab和BEFORE合并之后从提交中删除文件:

  1. 打开GitLab合并请求
  2. 选择&#39;更改&#39;标签
  3. 查找提交中不需要的文件
  4. 点击查看文件&#39;文件按钮
  5. 点击&#39;删除&#39;按钮
  6. 输入提交信息并提交更改
  7. 现在已修复您的合并请求,并从您的提交中删除了不需要的文件。您现在可以合并(如果其余的通过代码审查)。

    您也可以通过这种方式编辑和重新发送文件。这是一种快速修复的简便方法,无需打开Eclipse / IntelliJ(您使用的任何其他工具)并检查分支。

    这节省了我几个小时的痛苦,避免了在Eclipse中从推送的分支中删除文件。