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 并且想要恢复,
我如何回到最后一次获取/合并上游之前的状态?

编辑。

认为

  1. 我在上游合并
  2. 我合并了团队成员推送到 origin/master 的内容(个人)

现在我想撤消第 1 步。

git reset --hard commit_sha_of_one_prior_the_merge_1

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

如何保持第 2 步合并?

假设一个稍微复杂的场景

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

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

4

2 回答 2

3

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

git reset --hard HEAD~1

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

于 2013-05-07T10:05:15.593 回答
-1

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

git reset --hard origin/master

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

git reflog

您可以看到撤消 git rebase以了解更多详细信息

于 2013-05-07T09:40:47.017 回答