首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >恢复故障-恢复?

恢复故障-恢复?
EN

Stack Overflow用户
提问于 2013-07-16 20:56:07
回答 2查看 191关注 0票数 0

所以我在github上有两个分支--Master&Refactor。我在当地登记了refactor,然后去了镇上。在某种程度上,我搞砸了,做了一个git push origin master,而不是推到原始重构,而且,直到两周后,我才注意到这个问题,因为我向master提交了进一步有效的更改。

/me面膜

为了尝试un,我在本地签出了master,并执行了一个git revert <some tag>,它通过删除我添加的各种文件来修复主服务器,等等。结局愉快!被推到原主那里,一切都很好。继续在我的本地重构分支工作,偶尔推动到原始重构。

今天,我完成了重构的第一关,并希望将我的更改推送给主人。我是git addgit commitgit push origin refactor。平安无事。然后我试着推到原主那里。失败!不奇怪,因为恶作剧需要手动合并,对吧?所以我在我的本地重构部门git pull origin master .所有的东西都散开了。我所有的新文件都被删除了,到处都是冲突。

我认为正在发生的是,这种恢复的推动是试图应用,并与我完全满意的变化冲突,这些变化应该干净地应用在大师之上,如果只是如此。

所以,既然我还是个新手,有什么建议来拯救我的残疾吗?如果你能提供一些关于如何在我未来的工作流程中避免这类错误的一般指导/教育的话,你就可以得到额外的分数。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-16 21:38:07

关于如何在将来避免这种情况:将push.default设置为upstream,并且只运行git push而不需要进一步的参数,除非您明确地希望推送到另一个分支(我个人从未这样做)。不要推到其他的树枝上。查看master,合并refactor,推送。

您可能还需要考虑合并中的父级顺序。您的工作流程在那里造成了完全的混乱。

关于修复您的问题:您猜对了:您正在合并您的还原提交,所以这就是git所做的。以下是如何防止这种情况:

  • 创建一个新的分支master-fix-revert of master并检查它: git签出-b主-修复-恢复母版
  • 恢复您的还原: git还原**SHA-of-还原-提交**
  • 查看您的refactor分支并合并您的master-fix-revert: git签出重构git合并主-修复-恢复
  • 删除临时分支: git分支-d主修复-恢复
票数 3
EN

Stack Overflow用户

发布于 2013-07-16 21:47:39

git revert取消通过添加新提交来取消更改,这将应用与以前提交中所做的相反的更改。当您想要撤消更改而不重写您公开推动的分支的历史,以及其他已经进入它们自己的存储库的分支的历史时,它是非常有用的。

如果这不是您的情况,我建议使用更直观的技术(如git reset )来撤消更改。假设您的主分支提交了A、B、C,而您在此基础上意外地提交了D和E。

代码语言:javascript
复制
                       master
 A <-- B <-- C <-- D <-- E

如果D和E是您不想要的、多余的提交,您可以简单地:

到你当地的支部去:

代码语言:javascript
复制
git checkout master

使用--hard使其指向特定的提交。这是一个非常通用的命令,提交可以是对象库中的任何内容,它不一定一定是主历史中的提交。就你而言:

代码语言:javascript
复制
git reset --hard <sha1 of C>

           master           
 A <-- B <-- C

然后用武力推动你的回购,因为你有重写的历史,因此它不是快速前进:

代码语言:javascript
复制
git push origin master -f

然后,检查重构并继续工作。如果您想从主分支指向的位置(即额外的多余提交)拾取,可以使用git reset将其设置在那里:

代码语言:javascript
复制
git checkout refactor
git reset --hard <sha1 of E>

           master      refactor
 A <-- B <-- C <-- D <-- E

当然,这是可选的,当然,您可以决定使用另一种方法,例如从新主程序中进行分支重构,手动添加前面的修改,或者通过筛选等等。

然后继续向refactor添加提交,然后合并到master:

代码语言:javascript
复制
git checkout master
git merge refactor
git push origin master

                            master  
                            refactor
 A <-- B <-- C <-- D <-- E <-- F

在那里,它仍然是一个非常基本的工作流程。我的建议是使用像gitk这样的工具

代码语言:javascript
复制
gitk --all

尽可能多地看看你不同的分支发生了什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17686824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档