如何恢复`git fetch upstream; git merge upstream/master`?

eug*_*ene 9 git revert

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

这是我的设置.

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

我的工作流程是这样的:

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
Run Code Online (Sandbox Code Playgroud)

现在我发现upstream/master有一个bug并且想要恢复,
如何在我最后一次获取/合并上游之前返回状态?

编辑.

假设

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

现在我要撤消第1步.

git reset --hard commit_sha_of_one_prior_the_merge_1

(虽然找到啥是不容易的.git的日志显示了很多承诺的上游沙的,所以这是不容易找到犯-SHA-of_one_prior_the_merge_1这是不是upstream而是 origin/master)

如何保持第2步合并?

假设一个稍微复杂的场景

  1. 我上游合并了
  2. 我合并了另一个团队成员推送到Personal的内容
  3. 我也将我的工作推向了个人

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

cex*_*yat -1

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

git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)

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

git reflog
Run Code Online (Sandbox Code Playgroud)

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