git - 源代码树 - 如何还原推送的提交

标签 git version-control atlassian-sourcetree

我有 2 个远程分支,分别是 dev 和 master。
我总是在 dev 分支开发并将更改 merge 到 master 分支。
但是我发现我不小心使用了master分支开发然后提交并推送到远程。

enter image description here

有什么方法可以还原它,比如取消最后一次提交而不创建新历史吗?
我正在使用源代码树

最佳答案

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


由于您独自在 repo 上工作,没有 banch 权限方案阻止您推送,您唯一的问题是找到哪个提交是 master在你最后一次 push 之前。

您可以简单地从您的 git log --oneline master 中找到它如果您只提交了几次,则输出。从 dev 中找到最后一次 merge ,请注意提交哈希,我们称它为 <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

...您将准备就绪,无论是本地还是远程。

关于git - 源代码树 - 如何还原推送的提交,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64802468/

相关文章:

macos - 自动化 Git 和 SSH 工作流程

git - git中的破坏性命令有哪些?

sql-server - merge Git 数据库从一个分支到另一个分支的提交而无需 Cherrypicking

git - 在 BitBucket SourceTree 中 checkout 、获取和 pull

git - 搜索 git repo 文件的所有版本

git - 如何在 master 分支之上重新应用分支的所有提交,但将其保留在自己的分支中?

git - 如何解决gitlab中的Access denied?

Git diff 两个名称中带有点 (.) 的分支

svn - 在颠覆中绕过 ssl 证书验证

visual-studio - 安装 Team Foundation Server