【问题标题】:Remove last commit and push删除最后一次提交并推送
【发布时间】:2017-04-03 06:29:27
【问题描述】:

同时学习 GIT 和 GitKraken。我在一个文件中做了小改动 - aa.cpp,在 GitKraken 的帮助下提交并推送到远程存储库。突然我发现我已经推送了我不喜欢的项目目录中的所有文件。

现在我需要从存储库中删除不需要的文件。我更喜欢从远程存储库中删除最后一次推送并尝试再次提交和推送。如何使用GIT 命令删除最后一次提交。如何与GitKraken 相同?

【问题讨论】:

标签: git bitbucket gitkraken


【解决方案1】:

如果你已经推送了这个提交,那么有可能其他人拉了这个分支。在这种情况下,重写你的分支的历史是不可取的,你应该恢复这个提交:

git revert <SHA-1>
git push origin branch

这里的&lt;SHA-1&gt; 是您要删除的提交的提交哈希。要查找此哈希值,只需在您的分支上键入 git log 并检查第一个条目。

使用git revert 实际上添加一个新的提交,它是您要删除的提交的镜像。这是在公共分支上撤消提交的首选方式,因为它只是向分支添加新信息。

如果你确定你是唯一使用这个分支的人,那么你还有另一个选择:

git reset --hard HEAD~1

紧随其后

git push --force origin branch

但只有在没有其他人共享此分支时才应使用此选项。

【讨论】:

  • --force 的更好版本是--force-with-lease。这会将远程存储库与您的本地原始副本进行比较,并且如果其他人在您上次获取后将提交推送到该分支,它不会覆盖它
【解决方案2】:

我的方法是输入git status,它允许我们验证我们当前所在的分支,然后是:

git log

然后,您会看到如下内容:

commit aa09a82fb69af2d1aebde51d71514f7a03c3a692
Author: User <user@useremail.com>
Date:   Fri Nov 4 15:36:22 2016 -0400

    Fix issue with vertical scroll being forced

commit 411771837efe3ed555395e77fd35105a500ab758
Author: User <user@useremail.com>
Date:   Thu Nov 3 15:50:42 2016 -0400

    Add user notifications

commit f43b262f4e02b5a7268280e1230d44e36d1e547b
Author: User <user@useremail.com>
Date:   Thu Nov 3 12:11:00 2016 -0400

    All your base are belong to us

所以,这告诉我们commit aa09a82f 是你的最后一个,commit 41177183 是它之前的那个,那么:

git reset --hard 41177183

...让我们回到那个提交,保留远程备份。与另一个 git status 一起确保一切都为双推做好了准备(我个人对验证我当前的分支有点强迫症,尤其是在多任务处理时):

git push origin :<branch_name>
git push origin <branch_name>

此时,您应该已准备就绪,但最好跟进:

git fetch --all --prune
git branch -av

...清理您的分支列表并显示本地和远程以比较提交消息。

此外,如果与团队合作,请确保他们在继续之前了解这一点。在您删除最后一个提交并推送之前,您不希望他们拉动或推送分支。

【讨论】:

    【解决方案3】:

    我确实希望你在一个单独的分支上工作,而不是主分支(或者如果你使用 git-flow 则进行开发)。对于我的示例,我将使用 my-broken-branch 作为分支名称;)

    我的步骤是:
    移除远程分支,我们稍后会推送更新的版本。

    git push origin :my-broken-branch
    

    接下来从本地分支中删除最后一次提交。 HEAD^1 指的是比当前更早的提交。

    git reset HEAD^1
    

    现在继续添加您需要的文件并按照您的习惯提交。最后将您的分支推送到远程。它将在那里重新创建分支,并且没有人需要知道更改的提交。

    git push origin my-broken-branch
    

    【讨论】:

      猜你喜欢
      • 2015-01-16
      • 2012-05-30
      • 2013-01-28
      • 1970-01-01
      • 2020-04-11
      • 1970-01-01
      • 2016-11-07
      • 2021-10-28
      相关资源
      最近更新 更多