这是我在我应该稳定的树枝上做的事情……
% git rebase master
First, rewinding head to replay your work on top of it...
Fast-forwarded alpha-0.3.0 to master.
% git status
# On branch alpha-0.3.0
# Your branch is ahead of 'origin/alpha-0.3.0' by 53 commits.
#
nothing to commit (working directory clean)
% git push
Fetching remote heads...
refs/
refs/heads/
refs/tags/
refs/remotes/
'refs/heads/master': up-to-date
updating 'refs/heads/alpha-0.3.0'
from cc4b63bebb6e6dd04407f8788938244b78c50285
to 83c9191dea88d146400853af5eb7555f252001b0
done
'refs/heads/unstable': up-to-date
Updating remote server info
我后来意识到,这完全是一个错误。我想撤消整个过程,并将alpha-0.3.0分支恢复到原来的样子。
我该怎么办?
您需要确保这个存储库的其他用户没有获取不正确的更改,或者试图在您希望删除的提交之上构建,因为您要倒带历史记录。
然后你需要“强制”推旧的引用。
git push -f origin last_known_good_commit:branch_name
或者在你的情况下
git push -f origin cc4b63bebb6:alpha-0.3.0
您可能已经在远程存储库上设置了receive. denynonfastforward。如果是这种情况,那么您将得到一个包含短语[remote rejected]的错误。
在这个场景中,您必须删除并重新创建分支。
git push origin :alpha-0.3.0
git push origin cc4b63bebb6:refs/heads/alpha-0.3.0
如果这不起作用——可能是因为设置了receive.denyDeletes,那么您必须直接访问存储库。在远程存储库中,您必须执行以下管道命令。
git update-ref refs/heads/alpha-0.3.0 cc4b63bebb6 83c9191dea8
场景1:如果你想撤销最后一次提交说8123b7e04b3,下面是命令(这对我有用):
git push origin +8123b7e04b3^:<branch_name>
输出如下所示:
Total 0 (delta 0), reused 0 (delta 0)
To https://testlocation/code.git
+ 8123b7e...92bc500 8123b7e04b3^ -> master (forced update)
注意:要将更改更新到本地代码(也要在本地删除提交):
$ git reset --hard origin/<branchName>
Message displayed is : HEAD is now at 8a3902a comments_entered_for_commit
额外的信息:
场景2:在某些情况下,你可能想通过前面的命令恢复你刚刚撤销的(基本上是撤销撤销),然后使用下面的命令:
git reset --hard 8123b7e04b3
git push
输出:
HEAD is now at cc6206c Comment_that_was_entered_for_commit
更多信息请访问:https://github.com/blog/2019-how-to-undo-almost-anything-with-git