Git 如何返回到以前的提交删除所有我';您是否已在本地/公共回购中过账?

Git 如何返回到以前的提交删除所有我';您是否已在本地/公共回购中过账?,git,visual-studio-2017,commit,ignore,Git,Visual Studio 2017,Commit,Ignore,我在本地回购。阶段+提交,然后推送到服务器。主提交现在是4e4f27c554ee42e5fb7a0b62b6d921cbd05819c9 我犯了一个错误!嗯 我想回到上一次提交,回到公共e本地回购中的5e814650f03d04e56fcb069000f77123c1b5273b 我怎么做?尝试了git push origin+5e814650f03d04e56fcb069000f77123c1b5273b:master,但在本地repo上,我仍然可以在传出提交窗口(Visual Studio

我在本地回购。阶段+提交,然后推送到服务器。主提交现在是
4e4f27c554ee42e5fb7a0b62b6d921cbd05819c9

我犯了一个错误!嗯

我想回到上一次提交,回到公共e本地回购中的
5e814650f03d04e56fcb069000f77123c1b5273b

我怎么做?尝试了git push origin+5e814650f03d04e56fcb069000f77123c1b5273b:master,但在本地repo上,我仍然可以在传出提交窗口(Visual Studio git工具)中看到错误的提交,我不知道如何删除它


最好的方法是什么?

您可以根据需要使用
git revert
git reset

  • 使用git revert-不会删除还原的提交。相反,Git创建一个新的提交,其中包含的文件恢复为以前的状态。 因此,版本控制历史向前移动,而文件状态向后移动
  • 使用git reset--hard-git丢弃repo当前状态和目标提交之间的任何提交。然后,分支将在您将头部重置为的提交处停止。尽管提交看起来不再是分支历史记录的一部分,但它们不会被删除。它们仍然存储在Git中
之后,将更改推送到remote(假设您的分支在这里和远程都称为master,并且您的远程称为origin):-

#注意这将硬重置提交
git重置——硬
#将更改推送到远程
git-push-f源主机

您可以根据需要使用
git revert
git reset

  • 使用git revert-不会删除还原的提交。相反,Git创建一个新的提交,其中包含的文件恢复为以前的状态。 因此,版本控制历史向前移动,而文件状态向后移动
  • 使用git reset--hard-git丢弃repo当前状态和目标提交之间的任何提交。然后,分支将在您将头部重置为的提交处停止。尽管提交看起来不再是分支历史记录的一部分,但它们不会被删除。它们仍然存储在Git中
之后,将更改推送到remote(假设您的分支在这里和远程都称为master,并且您的远程称为origin):-

#注意这将硬重置提交
git重置——硬
#将更改推送到远程
git-push-f源主机

Uhm,如果我有编辑(还没有准备好)怎么办?这也会把它们全部移除。我可以避免吗?@markzzz:staged或not,
git reset--hard
将摧毁它们,是的。解决办法是提交它们。当然,这会变得很棘手,因为提交是在当前分支上进行的。该问题的解决方案有时是
git stash
,它会进行不在任何分支上的提交,并允许您在重置当前分支或移动到其他分支后恢复隐藏的更改。(我不是git stash的超级粉丝,但这个特殊的用例非常不错。)我明白了,谢谢!另外:“虽然提交不再是分支历史记录的一部分,但它们不会被删除。”。如果我想完全删除它们呢?还有其他更进一步的命令吗?嗯,如果我有编辑(还没有上演)呢?这也会把它们全部移除。我可以避免吗?@markzzz:staged或not,
git reset--hard
将摧毁它们,是的。解决办法是提交它们。当然,这会变得很棘手,因为提交是在当前分支上进行的。该问题的解决方案有时是
git stash
,它会进行不在任何分支上的提交,并允许您在重置当前分支或移动到其他分支后恢复隐藏的更改。(我不是git stash的超级粉丝,但这个特殊的用例非常不错。)我明白了,谢谢!另外:“虽然提交不再是分支历史记录的一部分,但它们不会被删除。”。如果我想完全删除它们呢?还有其他命令吗?
# note this will hard reset your commit
git reset --hard <commit-hash>
# pushing changes to remote
git push -f origin master