我和其他开发人员一直在合并并将我们的工作推向一个名为“工具”的非主分支。这样,我们没有影响团队的其他成员。我的主题分支叫做DPM-93,我的git工作流就是这个。
# 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
此时,在分支工具中出现了一堆新东西,我不知道如何摆脱删除我的工作区并重新克隆回购。
有什么方法可以把它退回到拉动之前的状态?
答案 0 :(得分:89)
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
”的同义词,可以清除索引文件和工作树中的混乱。- 将主题分支合并到当前分支中,从而产生快进。
- 但您认为主题分支还没有为公众消费做好准备 “pull”或“merge”始终将当前分支的原始提示保留在
醇>ORIG_HEAD
中,因此重新设置它会使您的索引文件和工作树返回到该状态,并重置分支的尖端到那个提交。
有关详情,请参阅HEAD
and ORIG_HEAD
。
答案 1 :(得分:64)
重置主分支:
git reset --hard origin/master
答案 2 :(得分:9)
您可以使用git log
查找您希望成为toolwork
分支头部的修订版的SHA-1,然后使用git reset --hard <SHA1>
将您的工作副本还原为修改
首先备份所有内容!并重新阅读git reset
的手册页,以确保它正在执行您想要的操作。
编辑:哦,是的,ORIG_HEAD应该包含正确的SHA-1。但先检查一下。
答案 3 :(得分:4)
我最近做了类似的事情,并使用了基于this answer的更简单的解决方案。
假设您想要恢复为的toolwork
分支的状态已经推送到origin
,您只需执行
git fetch origin
git reset --hard origin/toolwork
在我的情况下,ORIG_HEAD
的值已被另一个分支上的另一个合并覆盖,并且这样做我不必担心在日志中搜索正确的提交。
答案 4 :(得分:0)
对我有用的只是
git reset --hard
我是通过不幸的合并/拉动从本地存储库中做到的:
Laptop@LAPTOP-xxxxxxxx /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2|MERGING)
$ git reset --hard
HEAD is now at 2d5a511 [last commit comment]
Laptop@LAPTOP-xxxxxxxx /d/Google Drive/xxxxxxx/Github/xxxxx (staging_ec2)
$
答案 5 :(得分:0)
您可以使用以下命令中止合并
git merge --abort
它将完全消除意外拉动...
答案 6 :(得分:0)
第 1 步:
git log
git reset --hard <hash>,
散列类似于 0928817nsbn78867hs3g5666
例如:如果你git log
,你会得到:
commit 0928817nsbn78867hs3g5666 (HEAD -> yourrepo, origin/yourrepo)
第 2 步:
git reset --hard 0928817nsbn78867hs3g5666