我如何恢复 `git fetch 上游; git 合并上游/master`? [复制]

Posted

技术标签:

【中文标题】我如何恢复 `git fetch 上游; git 合并上游/master`? [复制]【英文标题】:How do I revert `git fetch upstream; git merge upstream/master`? [duplicate] 【发布时间】:2013-05-01 05:05:53 【问题描述】:

这个问题与其他问题的不同之处在于,我想在恢复一些提交的同时保留一些提交。

这是我的设置。

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

现在我发现上游/master 有一个错误并想要恢复, 我如何回到最后一次获取/合并上游之前的状态?

编辑。

假设

    我在上游合并了 我合并了团队成员推送到 origin/master(Personal) 的内容

现在我想撤消第 1 步。

git reset --hard commit_sha_of_one_prior_the_merge_1

(虽然找到sha并不容易。git log显示了很多commit sha的上游,所以不容易找到 commit-sha-of_one_prior_the_merge_1 不是 upstream 而是 origin/master)

如何保持第 2 步的合并?

假设一个稍微复杂的场景

    我在上游合并 我合并了其他团队成员推送到个人的内容 我也将我的工作推送到个人

现在我想撤消上游合并。 我该怎么做?

【问题讨论】:

***.com/questions/2389361/undo-a-git-merge 【参考方案1】:

您可以使用以下命令将本地 master 分支重置为 origin/master 状态(如果您尚未将合并推送到 origin/master):

git reset --hard origin/master

如果这不可能,您可以使用 reflog :

git reflog

您可以查看undoing a git rebase了解更多详情

【讨论】:

这与 OP 想要的相反。【参考方案2】:

既然你有一个实际的合并提交——因为你一直在引入你自己的更改——你应该能够做到:

git reset --hard HEAD~1

假设您的最后一次提交是有问题的合并提交。

【讨论】:

我的私人仓库中有其他提交,除了合并提交

以上是关于我如何恢复 `git fetch 上游; git 合并上游/master`? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 git-svn 中设置上游分支?

如何使 git 分支的上游引用为只读?

同步上游的提交时,如何在 Git 中清理提交历史?

git push/pull 对应分支

Git中checkout、fetch和pull的区别

git如何将上游(upstream)新建分支(origin没有)导入到origin中?