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

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

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

他们都在同一个修订。

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

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

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

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


当前回答

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

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

其他回答

对于Windows机器,使用:

git reset HEAD~1  #Remove Commit Locally

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

git reset --soft HEAD^

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

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

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

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

我只是想从远程和清除提交历史中删除最后一次提交。 下面的方法非常有效

git reset --hard HEAD^ 
git push -f 

重置头部并恢复到前一次提交的方法是通过

$ git reset HEAD^ --hard
$ git push <branchname> -f

但有时它可能不被远程分支接受:

To ssh:<git repo>
 ! [rejected]        develop -> develop (non-fast-forward)
error: failed to push some refs to 'ssh:<git repo>'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. Integrate the remote changes (e.g.
hint: 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

另一种方法是

git revert HEAD
git push <remote branch>

这很好。

注意:记住如果git push -f <force>失败,然后尝试恢复。之前做一个git pull,这样远程和本地是同步的,然后尝试git revert。 检查git日志,以确保远程和本地在同一点提交相同的SHA1..

git revert 
A --> B --> C -->D
A--> B --> C --> D --> ^D(taking out the changes and committing reverted diffs)