如何在`git push`之后在本地和远程撤销`git commit`

我已经执行了git commit然后是git push 。 我怎样才能恢复在本地和远程存储库的变化?

 $ git log commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8 Author: Michael Silver <Michael Silver@gmail.com> Date: Tue Jun 11 12:24:23 2011 -0700 
 git reset --hard HEAD~1 git push -f <remote> <branch> 

(例如push: git push -f origin bugfix/bug123

这将撤消上次提交并将更新的历史推送到远程。 您需要传递-f因为您要replace远程中的上游历史logging。

通常,使用以下命令进行“反向”提交:

 git revert 364705c 

然后像往常一样发送到远程:

 git push 

这不会删除提交:它会进行额外的提交,撤消第一次提交的操作。 其他任何东西都不是很安全,特别是当这些改变已经被传播的时候。

首先,放松。

“没有任何东西在我们的控制之下,我们的控制只是幻想”, “错在于人”

我知道你已经无意中将你的代码推送到remote-master 。 这将是好的。

1.首先,获取您尝试返回的提交的SHA-1值,例如提交给主分支。 运行这个:

 git log 

你会看到一堆'f650a9e398ad9ca606b25513bd​​4af9fe …'像每个提交的string。 从您想要返回的提交中复制该号码。

2.现在,input以下命令:

 git reset --hard your_that_copied_string_but_without_quote_mark 

你应该看到像“HEAD现在在”的消息。 你清楚了。 刚才所做的就是在本地反映这种变化。

3.现在,input以下命令:

 git push -f 

你应该看到像

“警告:push.default未被设置;其隐式值已经改变……总0(delta 0),重用0(delta 0)… … your_branch_name – > master(强制更新) “。

现在,你们都清楚了。 再次用“git log”检查master,你的fixed_destination_commit应该在列表的最上面。

欢迎您(提前;))

更新:

现在,所有这些开始之前所做的改变现在都消失了。 如果你想把这些艰苦的工作带回来,这是可能的。 感谢git refloggit cherry-pick命令。

为此,我build议请跟随这个博客或这个职位 。

如果你不希望你的改变消失(暂停的变化), git reset HEAD~1 HEAD〜1。 更改,提交并再次git push -f [origin] [branch]git push -f [origin] [branch]

你可以做一个交互式的rebase:

 git rebase -i <commit> 

这会调出你的默认编辑器。 只需删除包含要删除的提交的行即可删除该提交。

当然,您将需要访问远程存储库以在其中应用此更改。

看到这个问题: Git:从存储库中删除选定的提交

尝试使用

 git reset --hard <commit id> 

请注意:这里提交id将提交你想要去的id,但不是你想要重置的id。 这是唯一的一点,我也被困住了。

然后推

 git push -f <remote> <branch> 

或者:

 git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master 

强制原始远程存储库的主分支到上次提交的父分支