我已经表演了,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 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>
(示例推送 git push -f origin bugfix/bug123
:)
这将撤消最后一次提交并将更新的历史记录推送到远程。您需要通过,-f
因为您要替换遥控器中的上游历史记录。
通常,使用以下命令进行“反向”提交:
git revert 364705c
然后像往常一样将其发送到遥控器:
git push
这不会删除提交:它会进行额外的提交,以撤消第一次提交所做的任何事情。其他任何东西,都不是很安全,尤其是当更改已经传播时。
首先,放松。
“没有什么在我们的控制之下。我们的控制只是幻觉。”,“犯错是人”
我知道您无意中将代码推送到remote-master
. 这会好起来的。
1.首先,获取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
你应该看到像
“警告:push.default 未设置;其隐含值已更改为............总计 0(增量 0),重用 0(增量 0).........your_branch_name -> master(强制更新) 。”
现在,你们都清楚了。再次使用“git log”检查master,你的fixed_destination_commit 应该在列表的顶部。
欢迎您(提前;))
更新:
现在,你在所有这些开始之前所做的改变,现在都消失了。 如果你想把那些辛苦的工作带回来,这是可能的。感谢git reflog和git cherry-pick命令。
git reset HEAD~1
如果您不希望您的更改消失(未分级更改)。更改、提交并再次推送git push -f [origin] [branch]
尝试使用
git reset --hard <commit id>
请注意:这里的 commit id 将是你想要去的提交的 id,而不是你想要重置的 id。这是我也被卡住的唯一一点。
然后推
git push -f <remote> <branch>
您可以进行交互式变基:
git rebase -i <commit>
这将打开您的默认编辑器。只需删除包含要删除的提交的行即可删除该提交。
当然,您也需要访问远程存储库才能在此处应用此更改。
看到这个问题:Git:从存储库中删除选定的提交
或者:
git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master
强制源远程存储库的主分支到最后一次提交的父级