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)
- 尝试从上游更新导致很多冲突; 你现在还没准备好花很多时间合并,所以你以后决定这么做。
- “
pull
”没有合并提交,因此“git reset --hard
git reset --hard HEAD
”的同义词“git reset --hard HEAD
”清除了索引文件和工作树的混乱。- 合并一个主题分支到当前分支,这导致了一个快进。
- 但你决定主题分支尚未准备好供公众使用。
“拉”或“合并”总是将当前分支的原始尖端留在ORIG_HEAD
,因此难以重置将索引文件和工作树返回到该状态,并将分支的尖端重置为该提交。
有关更多信息,请参阅HEAD
和ORIG_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正确的提交。