同时学习 GIT 和 GitKraken。我在一个文件中做了一些小改动——aa.cpp
在GitKraken
. 突然我发现我已经推送了我不喜欢的项目目录中的所有文件。
现在我需要从存储库中删除不需要的文件。我更喜欢从远程存储库中删除最后一次推送并尝试再次提交和推送。如何使用GIT
命令删除最后一次提交。如何制作相同的GitKraken
?
如果你已经推送了这个提交,那么有可能其他人已经拉了这个分支。在这种情况下,重写你的分支的历史是不可取的,你应该恢复这个提交:
git revert <SHA-1>
git push origin branch
这<SHA-1>
是您要删除的提交的提交哈希。要查找此哈希值,只需键入git log
您的分支并检查第一个条目。
使用git revert
实际上添加了一个新提交,它是您要删除的提交的镜像。这是在公共分支上撤消提交的首选方式,因为它只是将新信息添加到分支。
如果您确定您是唯一使用此分支的人,那么您还有另一个选择:
git reset --hard HEAD~1
其次是
git push --force origin branch
但是只有在没有其他人共享此分支时才应使用此选项。
我的方法是输入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
...它会清理您的分支列表并显示本地和远程以比较提交消息。
此外,如果与团队合作,请确保他们在继续之前了解这一点。在您删除最后一个提交并推送之前,您不希望他们拉动或推送分支。
我确实希望您在一个单独的分支上工作,而不是 master(或者如果您使用 git-flow 则进行开发)。对于我的示例,我将my-broken-branch
用作分支名称;)
我的步骤是:
删除远程分支,稍后我们将推送更新的版本。
git push origin :my-broken-branch
接下来从本地分支中删除最后一次提交。HEAD^1
指比当前更早的提交。
git reset HEAD^1
现在继续添加您需要的文件并按照您的习惯提交。最后将您的分支推送到远程。它将在那里重新创建分支,并且没有人需要知道更改的提交。
git push origin my-broken-branch