如何在`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
你会看到一堆'f650a9e398ad9ca606b25513bd4af9fe …'像每个提交的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 reflog和git 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
强制原始远程存储库的主分支到上次提交的父分支