Git 如何撤消对';谁落后了?

Git 如何撤消对';谁落后了?,git,Git,我的同事昨天惹了点麻烦。他把master大约100次提交移到origin/master后面(我不知道他可能是怎么做到的),然后他提交了。结果是master现在处于他的新提交状态,而上一次提交在origin/master之后是100次提交。看起来是这样的: master * | | * origin/master | * ... ~one hundred commits below | * \ *

我的同事昨天惹了点麻烦。他把
master
大约100次提交移到
origin/master
后面(我不知道他可能是怎么做到的),然后他提交了。结果是
master
现在处于他的新提交状态,而上一次提交在
origin/master
之后是100次提交。看起来是这样的:

master * 
       |
       |  * origin/master 
       |  *
        ... ~one hundred commits below
       |  *
       \  *
         \
          *
我对如何解决这个问题没有信心,所以我们的做法是扔掉回购协议,重新克隆它。纠正这个错误的正确方法是什么

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


我将尝试解决这个问题:

git checkout master
git branch hotfix
#still on master
git reset --hard HEAD~1
git branch -f master <commit of origin/master>
git签出主机
git分支修补程序
#仍然是主人
git重置--硬头~1
git分支-f主机

我只需创建一个名为
修补程序的分支,然后将
主程序
重置为
源程序/主程序

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

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

首先,使用现有修复程序创建一个新分支:

git checkout -b oops <commit-id>
git签出-b oops
然后,切换回master并使用以下命令删除选定的提交:

git checkout master
git rebase --onto <commit-id>^ <commit-id>
git签出主机
git rebase--转到^
例如:

您只需切换到
origin/master
,删除
master
,然后重新创建它。在显式的
reset
@zerkms中,不需要知道主控程序所在的提交发生了什么,假设我还没有创建修补程序。它将是“不可访问的”,并且有一天会被GC收集到,因为
reset
非常可怕。我必须研究它在那种情况下是如何工作的。就为了我的信息,我的尝试也会起作用吗?@DanielKaplan:我想是的。不过,您也在进行
重置
。是的,这是公平的,我对头~1的重置(我经常这样做)比远程分支的重置(我从来没有这样做)舒服得多