我读过关于这个主题的类似帖子,但我不知道如何正确地做到这一点。

我签入了大约1000个我不想要的文件,我宁愿不需要逐个检查并将它们全部从回购中删除。

我有一个远程主分支。 我有本地主分支。

他们都在同一个修订。

我想回滚我的远程1提交。

我的历史是A- B- C- D- E。 我想回滚我的本地到D。 然后把它推到远程,所以我的当前哈希将是D远程和本地。

我做这个有问题。 我正在使用Git Tower,但对命令行很熟悉。任何帮助吗?

更新: 下面的评论很棒。使用重置似乎在一定程度上是不鼓励的,特别是当存储库与其他用户共享时。 在不使用硬重置的情况下撤销之前提交的更改的最佳方法是什么?有办法吗?


当前回答

如果你可以直接访问远程回购,你可以使用:

git reset --soft HEAD^

这是可行的,因为没有尝试修改不存在的工作目录。欲了解更多详情,请参阅原答案:

如何取消在git裸库中的最后一次提交?

其他回答

我用这个命令解决了你的问题:

git reset --hard HEAD^
git push -f <remote> <local branch>:<remote branch> 

将本地分支向后设置一个修订版本(HEAD^表示向后设置一个修订版本):

git reset --hard HEAD^

将更改推至原点:

git push --force

你必须强制push,否则git会识别出你在一次提交后落后于原点,什么都不会改变。

使用——force命令告诉git在远程回购中覆盖HEAD,而不尊重那里的任何进展。

你还可以这样做:

git reset --hard <commit-hash>
git push -f origin master

并让所有获得最新糟糕提交的人重置:

git reset --hard origin/master

如果你可以直接访问远程回购,你可以使用:

git reset --soft HEAD^

这是可行的,因为没有尝试修改不存在的工作目录。欲了解更多详情,请参阅原答案:

如何取消在git裸库中的最后一次提交?

通过输入以下命令,你可以看到你的git提交历史-

$ git 日志

假设你在这个分支上的历史是- commit_A, commit_B, commit_C, commit_D。其中,commit_D是最后一次提交,这是HEAD保留的位置。现在,要从本地和远程删除上次提交,您需要执行以下操作:

步骤1:通过-删除上一次本地提交

$ git重置-硬头~

这将把您的提交HEAD更改为commit_C

步骤2:将新HEAD提交的更改推送到远程

$ git 推送原点 +头

该命令将从远程删除最后一次提交。

附注:此命令在Mac OSX上进行了测试,应该也可以在其他操作系统上运行(但不声明其他操作系统)