删除上次提交并推送

时间:2016-11-19 13:27:41

标签: git bitbucket gitkraken

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

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

3 个答案:

答案 0 :(得分:8)

如果您已经推送了此提交,那么其他人可能已经撤消了该分支。在这种情况下,重写分支的历史记录是不可取的,您应该恢复此提交:

git revert <SHA-1>
git push origin branch

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

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

如果您确定自己是唯一使用此分支的人,那么您还有另一种选择:

git reset --hard HEAD~1

接着是

git push --force origin branch

但是如果没有其他人共享这个分支,你应该只使用这个选项。

答案 1 :(得分:1)

我的方法是输入git status,这样我们就可以验证我们当前所在的分行,然后是:

git log

然后,你会看到这样的事情:

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

    Fixed issue with vertical scroll being forced.

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

    Added Notifications.

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

    Your Bases 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

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

此外,如果与团队合作,请确保他们在继续前进之前已经意识到这一点。在删除最后一次提交并推送之前,您不希望他们在其末端拉动或推送分支。

答案 2 :(得分:0)

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

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

git push origin :my-broken-branch

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

git reset HEAD^1

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

git push origin my-broken-branch