我已经执行了git commit,后面跟着git push。如何在本地和远程存储库上恢复该更改?
git commit
git push
$ git log commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8 Author: Michael Silver <Michael Silver@gmail.com> Date: Tue Jun 11 12:24:23 2011 -0700
你可以做一个交互式的rebase:
git rebase -i <commit>
这将打开默认编辑器。只需删除包含要删除的提交的行以删除该提交。
当然,您也需要访问远程存储库来应用此更改。
请看这个问题:Git:从存储库中删除选定的提交
一般来说,执行“反向”提交,使用:
git revert 364705c
然后像往常一样发送到遥控器:
这不会删除提交:它会做出一个额外的提交,撤销第一次提交所做的一切。其他任何东西,都不是真正安全的,特别是当更改已经传播时。
git reset --hard HEAD~1 git push -f <remote> <branch>
(例如:推 git push -f origin bugfix/bug123)
git push -f origin bugfix/bug123
这将撤消上一次提交,并将更新后的历史推到远程。您需要传递-f,因为您正在替换远程中的上游历史记录。
-f
git reset HEAD~1如果你不希望你的变化消失(非阶段性的变化)。更改,提交并再次推送git push -f [origin] [branch]
git reset HEAD~1
git push -f [origin] [branch]
另外:
git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master
强制将源远程存储库的主分支转移到上一次提交的父分支
首先,放松。
“没有什么在我们的控制之下。我们的控制仅仅是幻觉。
我知道你无意中把你的代码推到remote-master。一切都会好的。
remote-master
1.首先,获取你试图返回的commit的SHA-1值,例如commit to master branch。运行这个:
SHA-1
git log
你会看到一堆“f650a9e398ad9ca606b25513bd4af9fe……”'类似于每次提交时的字符串。从提交中复制这个数字,你想要返回。
2.现在,输入以下命令:
git reset --hard your_that_copied_string_but_without_quote_mark
你应该看到像“HEAD is now at”这样的消息。你是安全的。它所做的只是反映了当地的变化。
3.现在,输入以下命令:
git push -f
你应该看到
"warning: push.default is unset;它的隐含价值已经改变 在……Total 0 (delta 0), reuse 0 (delta 0)… ...Your_branch_name -> master(强制更新)。" < / p >
现在,你们都安全了。再次使用“git log”检查master,你的fixed_destination_commit应该在列表的顶部。
不客气(提前)
更新:
现在,你在这一切开始之前所做的改变,现在都消失了。 如果你想重新找回那些努力的工作,这是可能的。感谢git reflog和git择优挑选命令
为此,我建议请遵循这个博客或这篇文章。
试着用
git reset --hard <commit id>
请注意:这里的commit id是你想要去的提交的id,而不是你想要重置的id。这是我唯一被困住的地方。
然后推
git push -f <remote> <branch>
然后强制将其推至原点(假设<remote> == origin)
<remote> == origin
git push -f origin <branch>