如何在本地和远程撤销'git commit I

b5lpy0ml  于 2022-12-10  发布在  Git
关注(0)|答案(8)|浏览(158)

我已经执行了git commit,然后又执行了git push。我如何在本地和远程存储库上恢复该更改?

$ git log
commit 364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8
Author: Michael Silver <Michael Silver@gmail.com>
Date:   Tue Jun 11 12:24:23 2011 -0700
cnjp1d6j

cnjp1d6j1#

git reset --hard HEAD~1
git push -f <remote> <branch>
  • (推送示例:* git push -f origin bugfix/bug123

这将撤消上次提交并将更新的历史推送到远程数据库。您需要传递-f,因为您要替换远程数据库中的上游历史。

eqzww0vc

eqzww0vc2#

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

git revert 364705c

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

git push

这不会删除提交:它会进行一次额外的提交,以撤销第一次提交所做的任何操作。其他任何操作都不安全,尤其是当更改已经被传播时。

xpcnnkqh

xpcnnkqh3#

"首先,放松“
“没有什么是在我们的控制之下。我们的控制只是一种幻想。",“人都会犯错”
我知道你无意中把你的代码推到了remote-master。这会没事的。

**1.**首先,获取您尝试返回的提交的SHA-1值,例如提交到主分支。运行以下命令:

git log

你会看到一堆'f650 a9 e398 ad 9 ca 606 b25513 bd 4af 9 fe...'像字符串沿着伴随着每个提交。从你***想要返回的提交中复制这个数字***。

**2.**现在,键入以下命令:

git reset --hard your_that_copied_string_but_without_quote_mark

你应该会看到类似“HEAD is now at“消息。2你现在处于清除状态。3它所做的只是在本地反映这个变化。

**3.**现在,键入以下命令:

git push -f

你应该看到
“警告:push.default未设置;它的隐式值已在以下位置更改......总计0(增量0),重用0(增量0)...... your_分支_name -〉master(强制更新)。”
现在,你都清楚了。再次用“git log”检查master,你的fixed_destination_commit应该在列表的顶部。
(事先不客气;))
最新消息:

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

为此,我建议请遵循this blogthis post

ruarlubt

ruarlubt4#

git reset HEAD~1如果您不希望您的更改消失(未暂存的更改)。更改、提交并再次推送git push -f [origin] [branch]

lnvxswe2

lnvxswe25#

尝试使用

git reset --hard <commit id>

请注意:这里的commit id是你想去的提交的id,而不是你想重置的id。这是我唯一被卡住的地方。
则推动了

git push -f <remote> <branch>
qrjkbowd

qrjkbowd6#

您可以执行交互式重定基准:

git rebase -i <commit>

这将打开你的默认编辑器。只要删除包含你想删除的提交的行,就可以删除该提交。
当然,您也需要访问远程存储库才能在那里应用此更改。
看到这个问题:Git: removing selected commits from repository

b09cbbtk

b09cbbtk7#

或者:

git push origin +364705c23011b0fc6a7ca2d80c86cef4a7c4db7ac8^:master

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

k75qkfdt

k75qkfdt8#

如果不想丢失在错误提交中所做的本地更改

git reset HEAD~1

然后用力把它推到原点(假设<remote> == origin

git push -f origin <branch>

相关问题