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

时间:2013-05-07 09:35:21

标签: git revert

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

这是我的设置。

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

现在我发现上游/主人有一个错误,想要恢复,
在上次获取/合并上游之前,如何返回状态?

编辑。

假设

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

现在我要撤消第1步。

  

git reset --hard commit_sha_of_one_prior_the_merge_1

     

(虽然找到sha并不容易.git log显示了很多提交   上游的沙漠,所以不容易找到   commit-sha-of_one_prior_the_merge_1不是upstream而是origin/master   {{1}})

如何保持第2步合并?

假设一个稍微复杂的场景

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

现在我要撤消上游合并。 我该怎么办?

2 个答案:

答案 0 :(得分:2)

由于您有实际的合并提交 - 因为您已经引入了自己的更改 - 您应该可以这样做:

git reset --hard HEAD~1

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

答案 1 :(得分:-1)

您可以将本地master分支机构重置为origin/master状态(如果您尚未将合并推送至origin/master):

git reset --hard origin/master

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

git reflog

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