mil*_*lus 69 git branch pull undo
我和其他开发人员一直在合并并将我们的工作推向一个名为"工具"的非主分支.这样,我们没有影响团队的其他成员.我的主题分支叫做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
Run Code Online (Sandbox Code Playgroud)
在我意外发出这些git命令之前,这大部分工作正常
git checkout toolwork
git pull origin master
Run Code Online (Sandbox Code Playgroud)
那时,一堆新东西出现在分支工具中,我不知道如何摆脱它删除我的工作区并重新克隆回购.
在拉动之前有没有办法将其支持到状态?
Von*_*onC 99
git reset --hard ORIG_HEAD
Run Code Online (Sandbox Code Playgroud)
从git reset手册页(如果你刚刚拉动):
撤消合并或拉动
$ 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)
Run Code Online (Sandbox Code Playgroud)
- 尝试从上游更新导致了很多冲突; 你现在还没有准备好花很多时间合并,所以你决定稍后再这样做.
- "
pull"没有进行合并提交,因此"git reset --hard"是" "的同义词,git reset --hard HEAD从索引文件和工作树中清除了混乱.- 将主题分支合并到当前分支,这导致快进.
- 但是你决定主题分支尚未准备好供公众使用.
"pull"或"merge"总是保留当前分支的原始提示ORIG_HEAD,因此重新设置它会使索引文件和工作树返回到该状态,并将分支的提示重置为该提交.
见HEAD和ORIG_HEAD更多.
Hom*_*osa 70
重置主分支:
git reset --hard origin/master
Run Code Online (Sandbox Code Playgroud)
您可以使用git log查找要作为toolwork分支头部的修订版的SHA-1 ,然后使用git reset --hard <SHA1>将工作副本还原到该修订版.
先备份一切!并重新阅读手册页git reset以确保它正在执行您想要的操作.
编辑:哦,是的,ORIG_HEAD应该包含正确的SHA-1.但先检查一下.
我最近做了类似的事情,并根据这个答案使用了一个更简单的解决方案。
假设toolwork您要恢复到的分支的状态已被推送到origin,您可以简单地执行
git fetch origin
git reset --hard origin/toolwork
Run Code Online (Sandbox Code Playgroud)
就我而言, 的值ORIG_HEAD已被不同分支上的另一个合并覆盖,这样做我不必担心在日志中搜索正确的提交。