Git拉错了分支

我和另一位开发人员合并,将我们的工作推向一个称为工具的非主分支。 这样,我们没有影响到其他的团队。 我的主题分支被称为DPM-93,我的git工作stream程是这样的。

# do some work git checkout DPM-93 git commit -m "did some work" # catch up git checkout toolwork git pull origin toolwork # rebase my topic branch git checkout DPM-93 git rebase toolwork # merge and push my changes git checkout toolwork git merge --no-ff DPM-93 git push origin toolwork 

这大部分工作正常,直到我意外地发出这些git命令

 git checkout toolwork git pull origin master 

在那一刻,一些新的东西出现在分支工具,我不知道如何摆脱它删除我的工作空间,并从回购重新克隆。

有什么办法可以把这个退到拉前的状态?

 git reset --hard ORIG_HEAD 

git reset man page (如果你只是做了拉):

撤消合并或拉

 $ git pull (1) Auto-merging nitfol CONFLICT (content): Merge conflict in nitfol Automatic merge failed; fix conflicts and then commit the result. $ git reset --hard (2) $ git pull . topic/branch (3) Updating from 41223... to 13134... Fast-forward $ git reset --hard ORIG_HEAD (4) 
  1. 尝试从上游更新导致很多冲突; 你现在还没准备好花很多时间合并,所以你以后决定这么做。
  2. pull ”没有合并提交,因此“ git reset --hard git reset --hard HEAD ”的同义词“ git reset --hard HEAD ”清除了索引文件和工作树的混乱。
  3. 合并一个主题分支到当前分支,这导致了一个快进。
  4. 但你决定主题分支尚未准备好供公众使用。
    “拉”或“合并”总是将当前分支的原始尖端留在ORIG_HEAD ,因此难以重置将索引文件和工作树返回到该状态,并将分支的尖端重置为该提交。

有关更多信息,请参阅HEADORIG_HEAD

重置主分支:

 git reset --hard origin/master 

您可以使用git log来查找您想要在您的toolwork分支的头部的修订版本的SHA-1,然后使用git reset --hard <SHA1>将您的工作副本恢复到该修订版本。

先把所有东西都背起来 并重新读取git reset的man页面,以确保它正在做你想要的。

编辑:哦,是的,ORIG_HEAD应该包含正确的SHA-1。 但先检查一下。

我最近做了一个类似的事情,并根据这个答案使用了一个更简单的解决scheme。

假设你想恢复的toolwork分支的状态已经被推origin ,你可以简单地做

 git fetch origin git reset --hard origin/toolwork 

在我的情况下, ORIG_HEAD的值已被另一个分支上的另一个合并覆盖,这样做,我不必担心在日志中search正确的提交。