如何还原 `git fetch upstream; git merge upstream/master`?

9

这个问题与其他问题不同之处在于,我希望在撤消某些提交的同时保留一些提交。

这是我的设置:

Upstream repo on github (public repo which I don't own)
Personal repo on my server(git clone --bare $upstream)

我的工作流程如下:

Need to customize my personal branch
   1. check out origin/master(Personal)
   2. make changes
   3. push to origin/master

Need to get new feature or bug fix from the original author(github)
   1. git fetch upstream
   2. git merge upstream/master

现在我发现upstream/master有一个bug,想要回滚操作,如何回到上次fetch/merge upstream之前的状态?
编辑。
假设:
1. 我合并了upstream 2. 我合并了团队成员推送到origin/master(Personal)的内容
现在我想撤销步骤1。
解决方法:
git reset --hard commit_sha_of_one_prior_the_merge_1 (虽然找到sha不容易,因为git log显示很多upstream的commit sha,所以不容易找到commit-sha-of_one_prior_the_merge_1,它不是upstream而是origin/master的)
如何保留步骤2的合并?
假设场景更复杂一些:
1. 我合并了upstream 2. 我合并了另一个团队成员推送到Personal的内容 3. 我也推送了我的工作到Personal
现在我想撤销upstream的合并。
解决方法:

https://dev59.com/MHE95IYBdhLWcg3wQ7qb - 1615903
2个回答

3

由于您有一个实际的合并提交 - 因为您已经引入了自己的更改 - 您应该能够执行以下操作:

git reset --hard HEAD~1

假设你最后一次提交是所讨论的合并提交。

除了合并提交之外,我的私有仓库中还有其他提交。 - eugene

-1

如果您还没有将合并推送到origin/master,则可以将本地的master分支重置为origin/master状态,方法如下:

git reset --hard origin/master

如果不可能的话,你可以使用reflog :
git reflog

您可以查看撤销 Git rebase以获取更多详细信息


这正好和 OP 想要的相反。 - Stig Brautaset

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