如何在推送到远程然后从远程主分支拉到本地后删除最后一个git commit

时间:2017-08-17 16:46:37

标签: git github version-control

我将更改推送到远程分支,然后意识到我使用了错误的GitHub用户名,因此我尝试撤消提交,但没有成功。我读到我可以使用git reset HEAD^ 如果我没有将我的更改推送到远程,但它没有工作,因为已经对远程仓库进行了提交。

我使用git reset @~1使我的本地提交历史记录回到第一个,并在第一个之后删除整个提交历史记录。我的目标是只提交最后一个,所以我git pull origin mastergit fetch --all将远程仓库放入我的本地,但它没有更新本地的提交历史记录。

那我应该怎么做: 1)更新与远程历史记录匹配的本地提交历史记录? 2)然后在远程仓库中提交我的最新提交?

最后,如果其他用户删除了提交历史记录(即使两者都属于我),是否会导致问题?

2 个答案:

答案 0 :(得分:1)

由于您已经推动了更改,因此您不应该真正改变它的历史。但是,如果您真的想要,现在您已将本地存储库重置为您想要的状态,您可以运行:

git push -f origin <branch name that you want to push>

-f选项会强制更改远程存储库。

执行此操作的正确方法是还原提交,这将创建一个新提交,它与您要还原的提交相反,有效地删除您在不更改历史记录的情况下所做的更改。

  • 首先,获取要撤消的提交的sha(它甚至不需要是最后一次提交)
  • 在本地运行命令`git revert
  • 正常推送更改git push origin <branch you want to push>

注意,这里没有推力。没有重写历史。

至于用户名的差异,您使用的用户名或电子邮件几乎没有区别。在你的git配置中,因为它们是信息性的。您可以在git配置中将您的姓名和电子邮件更改为您喜欢的任何内容,它将显示在git日志中。因此,您可以选择使用GPG签名提交来真正验证提交该提交的人确实是他们所说的人。您可以看到description of signing here

答案 1 :(得分:0)

要在本地删除最后一次提交,请使用:

git reset --hard id_penultimate_commit

要远程删除相同的提交,请使用:

git push --force