Source Tree - 如何回滚已推送的提交

3

我有两个远程分支,一个是dev,另一个是master。
我通常在dev分支上进行开发,并将更改合并到master分支中。
但我发现我不小心使用了master分支进行开发,然后提交并推送到远程。

enter image description here

有没有办法恢复它,就像取消上一个提交而不创建新的历史记录一样?
我正在使用SourceTree。


单独完成这个项目?如果是这样,那就很容易了。 - Romain Valeri
是的。我该怎么做?可以在本地保留更改吗? - CCCC
1个回答

2

(CLI解决方案-但SourceTree解决方案仍然受欢迎)


由于您在没有分支权限方案阻止您推送的情况下单独处理存储库,您唯一的问题是找到在您最后一次推送之前master所在的提交。

如果您只提交了几次,则可以从您的git log --oneline master输出中轻松找到。查找来自dev的最后一个合并请求,记录该提交哈希值,我们称其为<oldMasterHash>

然后只需执行以下操作:

# move dev where master is now
git checkout -B dev master
git push

# now let's "repair" master
git checkout master
git reset --hard <oldMasterHash>
# here we'll need --force to push since this is a history rewrite
git push --force

...然后你就可以设置好本地和远程环境了。


@CCCC,恐怕我不能这样做。但是,这些步骤可以引导您进行GUI选择,我猜? - Romain Valeri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接