Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何删除使用Git推送到远程存储库的提交_Git_Github_Smartgit - Fatal编程技术网

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

如何删除使用Git推送到远程存储库的提交,git,github,smartgit,Git,Github,Smartgit,我已经将一些提交推送到远程存储库,发现它们正在产生问题 我怎样才能回到以前的版本?也就是说,删除两个最新提交?我认为您可以在本地回滚并推送结果: $ git reset HEAD^ --hard $ git push REMOTE -f 其中“REMOTE”是远程名称。由于您已经将提交推送到远程存储库,最好的方法可能是恢复两次提交,这样您就不会给已经从远程存储库中提取的任何人带来任何问题 示例使用以下提交历史记录: e512d38 Adding taunts to management. bd

我已经将一些提交推送到远程存储库,发现它们正在产生问题


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

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

$ git reset HEAD^ --hard
$ git push REMOTE -f

其中“REMOTE”是远程名称。

由于您已经将提交推送到远程存储库,最好的方法可能是恢复两次提交,这样您就不会给已经从远程存储库中提取的任何人带来任何问题

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

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
如果只想在不修改历史记录的情况下恢复提交,可以执行以下操作:

git revert e512d38
git revert bd89039
或者,如果您不想让其他人看到您添加了kill开关,然后将其删除,您可以使用以下方法回滚存储库(但是,这会给已经从远程提取您的更改的其他人带来问题):


其中,
localBranch
是本地分支的名称,
remoteBranch
是远程分支的名称。

首先键入此命令

git log -n 4
此命令将显示最近4次提交及其SHA。在此类型之后,输入以下命令

git rebase -i SHA_ID
git push -f origin master
在要删除的提交之前键入提交的SHA,而不是SHA_ID

在此之后,将打开一个文件,在该文件的顶部,您将看到SHA和要删除的提交消息。删除此行并保存并退出文件

当你完成这项工作时,你必须用力推。因此,键入以下命令

git rebase -i SHA_ID
git push -f origin master

完成此操作后,您可以看到您的提交被删除。

您可以这样做,但这是不可取的,因为在此期间抓取提交的任何其他人都将获得。。。好的,为了避免不好的话,让我们说“他们必须努力工作才能从您的操作中恢复。”:-)最好使用“git revert”添加一个新的提交,以撤销以前的提交。(将“恢复”视为“添加一个提交,其修补程序是完全撤消以前提交的操作”,因为它就是这样。)@torek我一开始就想到了这一点,但我认为shadowfax可能还有其他用途,例如保持每个远程提交都能正确运行,否则他会想到“还原并推送”。我想你可能会惊讶于有多少人不理解git revert。另一方面,可能有完全不同的动机(如David M.Syzdek的回答)。在某些情况下,没有好的解决方案,只有最坏的解决方案(根据具体情况而定)。“给管理层添加嘲讽”产生了一句古老的(新的?)格言,“不要酒后推”。-)@torek我能说些什么,我既是一个酒鬼又是酒鬼。以下内容对我有用git reset--hard da8af4d git push origin-f localBranch:RemoteBranch值得注意的是,
git reset--hard
将撤销工作树中的任何本地修改,包括那些不属于麻烦提交的修改。如果有疑问,最好先备份工作树(快速
tar
)。