如何使用Git删除已推送到远程存储库的提交

sha*_*fax 13 git github smartgit

我已经将几个提交推送到远程存储库,发现它们正在创建问题.

我怎样才能回到以前的版本?也就是说,删除最近的两个提交?

Dav*_*dek 33

由于您已将提交推送到远程存储库,因此最好的方法可能是还原两个提交,这样您就不会为已从远程存储库中提取的任何人创建任何问题.

示例使用以下提交历史记录:

e512d38 Adding taunts to management.
bd89039 Adding kill switch in case I'm fired.
da8af4d Adding performance optimizations to master loop.
db0c012 Fixing bug in the doohickey
Run Code Online (Sandbox Code Playgroud)

如果您只想在不修改历史记录的情况下还原提交,则可以执行以下操作:

git revert e512d38
git revert bd89039
Run Code Online (Sandbox Code Playgroud)

或者,如果您不希望其他人看到您添加了kill开关然后将其删除,则可以使用以下命令回滚存储库(但是,这会导致其他已从远程执行更改的人员出现问题) :

git reset --hard da8af4d
git push origin -f localBranch:remoteBranch
Run Code Online (Sandbox Code Playgroud)

where localBranch是本地分支remoteBranch的名称,是远程分支的名称.

  • @torek我能说什么,我既是一个忠诚的饮酒者又是饮酒的提交者. (8认同)
  • "向管理层添加嘲讽"引发了旧的(新的)谚语,"不要喝酒,不要推".:-) (4认同)

pet*_*ter 6

我认为你可以在本地回滚并推送结果:

$ git reset HEAD^ --hard
$ git push REMOTE -f
Run Code Online (Sandbox Code Playgroud)

'REMOTE'是远程名称.

  • 你*可以*做到这一点,但这是不可取的,因为在此期间抓住提交的任何人都会得到......好吧,为了避免坏话,让我们说"他们必须努力从你的行为中恢复过来." :-)最好使用"git revert"添加一个撤消先前提交的新提交.(将"恢复"视为"添加提交,其修补程序是完全撤消先前提交的操作",因为它就是这样.) (3认同)