我已经执行git commit
后跟git push
。如何在本地和远程存储库上还原该更改?
$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael Silver@gmail.com>
Date: Tue Jun 11 12:24:23 2011 -0700
答案 0 :(得分:362)
git reset --hard HEAD~1
git push -f <remote> <branch>
(示例推送: git push -f origin bugfix/bug123
)
这将撤消上次提交并将更新的历史记录推送到远程。您需要传递-f
,因为您正在替换遥控器中的上游历史记录。
答案 1 :(得分:150)
通常,使用:
进行“反向”提交git revert 364705c
然后像往常一样将它发送到遥控器:
git push
这不会删除提交:它会进行额外的提交,撤消第一次提交所做的任何操作。其他任何东西,都不是很安全,特别是在变化已经传播的时候。
答案 2 :(得分:35)
首先,放松。
“我们无法控制任何事情。我们的控制仅仅是幻觉。”,“犯错误是人类”
我知道您无意中将代码推送到remote-master
。这将是好的。
1。首先,获取您尝试返回的提交的SHA-1
值,例如提交主分支。运行这个:
git log
你会看到一堆'f650a9e398ad9ca606b25513bd4af9fe ......'和每个提交一样的字符串。从 想要返回 的提交中复制该号码。
2。现在,输入以下命令:
git reset --hard your_that_copied_string_but_without_quote_mark
你应该看到像“HEAD现在在”的消息。你很清楚。它刚才所做的就是在当地反映这种变化。
3. 现在,输入以下命令:
git push -f
你应该看到
“警告:未设置push.default;其隐式值已更改 in .......总计0(delta 0),重用0(delta 0)...... ... your_branch_name - &gt;主人(强制更新)。“
现在,你们都清楚了。再次使用“git log”检查master,你的fixed_destination_commit应该在列表的顶部。
欢迎(提前;))
更新:
现在,在所有这些开始之前所做的更改现在已经消失。 如果你想再次带回那些艰苦的工作,那就有可能。感谢 git reflog 和 git cherry-pick 命令。
答案 3 :(得分:6)
git reset HEAD~1
如果您不希望更改消失(非分段更改)。更改,提交并再次推送git push -f [origin] [branch]
答案 4 :(得分:3)
您可以进行交互式变基:
git rebase -i <commit>
这将显示您的默认编辑器。只需删除包含要删除的提交的行,即可删除该提交。
当然,您将需要访问远程存储库以在此处应用此更改。
答案 5 :(得分:2)
可替换地:
git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master
将原始远程存储库的主分支强制为最后一次提交的父分支
答案 6 :(得分:2)
尝试使用
git reset --hard <commit id>
请注意:这里,commit id将是您要转到的提交的ID,而不是您要重置的ID。这是我被困的唯一一点。
然后按
git push -f <remote> <branch>