你如何撤消对落后的分支的承诺?

时间:2015-03-05 19:14:41

标签: git

我的同事昨天遇到了麻烦。他移动master约{100}次提交origin/master(我不确定他是怎么做的,可能是with this),然后他承诺了。结果是master现在处于他的新提交状态,之前的提交是origin/master之后的100次提交。它看起来像这样:

master * 
       |
       |  * origin/master 
       |  *
        ... ~one hundred commits below
       |  *
       \  *
         \
          *

我对如何解决这个问题并不感到自信,所以我们这样做的方法是扔掉回购并再次克隆它。解决这个错误的正确方法是什么?

他的意图是在hotfix之前创建一个名为origin/master 100个提交的新分支,并将这些更改提交给它。我认为他根本不想移动master


我会尝试解决这个问题:

git checkout master
git branch hotfix
#still on master
git reset --hard HEAD~1
git branch -f master <commit of origin/master>

2 个答案:

答案 0 :(得分:1)

我只是创建了一个名为hotfix的分支,并将master重置为origin/master

$ git checkout master
$ git branch hotfix
$ git reset --hard origin/master

答案 1 :(得分:0)

免责声明:我不是git专家。这是我能想到的最好的。

首先,创建一个包含现有修订的新分支:

git checkout -b oops <commit-id>

然后,切换回master并删除所选的提交:

git checkout master
git rebase --onto <commit-id>^ <commit-id>

实施例: https://gist.github.com/cmattoon/13aa5c8d711a7ffc7899