删除上次提交并推送

vic*_*ico 4 git bitbucket gitkraken

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

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

Tim*_*sen 10

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

git revert <SHA-1>
git push origin branch
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

其次是

git push --force origin branch
Run Code Online (Sandbox Code Playgroud)

但是,如果没有其他人共享此分支,您应该只使用此选项.

  • `--force` 的一个稍微好一点的版本是 `--force-with-lease`。这会将远程存储库与您的本地原始副本进行比较,并且如果自您上次获取以来其他人将提交推送到该分支,它不会覆盖它 (2认同)

Ste*_*lia 7

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

git log
Run Code Online (Sandbox Code Playgroud)

然后,你会看到类似这样的东西:

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
Run Code Online (Sandbox Code Playgroud)

因此,这告诉我们这commit aa09a82f是您的最后一个,也是commit 41177183之前的一个,然后:

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

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

git push origin :<branch_name>
git push origin <branch_name>
Run Code Online (Sandbox Code Playgroud)

此时,您应该已准备就绪,但最好继续执行以下操作:

git fetch --all --prune
git branch -av
Run Code Online (Sandbox Code Playgroud)

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

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