Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
修复错误合并后的Git回购_Git_Merge - Fatal编程技术网

修复错误合并后的Git回购

修复错误合并后的Git回购,git,merge,Git,Merge,我有一堆独立的分支,我想合并它们,因为它们中的每一个都是对程序不同部分的更新 我想我应该合并它们,但是在检查每个分支之后,我运行了一个git commit-a 然后我意识到整个程序都回到了过去,所以我运行了一个git reset--soft HEAD(我在某个地方读到了一篇文章,这应该会有所帮助),但那没有起到任何作用 我还从git收到了一条关于手动删除一些/git/index.lock的消息,因此我将其移动到了/git/backup\u of_index.lock,但这似乎也没有起到任何作用

我有一堆独立的分支,我想合并它们,因为它们中的每一个都是对程序不同部分的更新

我想我应该合并它们,但是在检查每个分支之后,我运行了一个
git commit-a

然后我意识到整个程序都回到了过去,所以我运行了一个
git reset--soft HEAD
(我在某个地方读到了一篇文章,这应该会有所帮助),但那没有起到任何作用

我还从git收到了一条关于手动删除一些
/git/index.lock
的消息,因此我将其移动到了
/git/backup\u of_index.lock
,但这似乎也没有起到任何作用

如何修复存储库并合并所有分支?

错误:

  • “我开始在我的新项目中使用git”
  • “我只是想合并它们,因为它们都是程序不同部分的更新”
  • 当你的代码有意义时,你不应该玩不熟悉的领域。如果你想这样做,至少要有一个后备计划

    灾难恢复似乎只对那些最需要它的人才重要,但现在已经太迟了

    我完全支持实验,但我讨厌看到这种情况,我为开发人员感到难过,因为我对他的鞋子非常了解,但是一旦你发现这个错误,你将永远不会忘记它


    在你决定玩之前,把你的代码扔到别的地方,这样当sh*t碰到风扇时,你可以回到你的舒适区,继续作为一个快乐的开发人员工作,在你完成工作后再继续玩。

    除非你已经破解了
    .git
    目录中的数据,你不太可能丢了什么东西。你可能有一堆乱七八糟的东西要收拾,可能要花很多时间才能弄清楚你做了什么,在哪里,但你可能什么也没丢

    这是个好消息

    坏消息是,任何人都很难帮助你

    您可能需要标识所有分支,并向后跟踪每个分支上的提交。您需要确定所有这些“
    git commit-a
    ”操作是否都是一个好主意。这听起来不太可能——因此您可能需要正确地进行合并,从下一次提交到每个分支的最后一次提交

    你还需要决定你真正想做什么

    听起来您想将一些分支合并到主分支master上,称之为BranchA、BranchB和BranchC。但目前还不清楚你是怎么尝试的

    考虑到事情有些混乱,我建议创建另一个分支,我们可以称之为“Fixup”。从主分支的负责人处创建。然后,将BranchA、BranchB和BranchC的相应版本合并到Fixup分支中。在每个阶段,检查代码是否实际正常工作-通过测试套件,等等。在Fixup分支上分别检入每个合并

    当您确信Fixup分支正确时,切换回主分支并将Fixup分支合并到主分支



    查尔斯·贝利(Charles Bailey)提出了一个非常明智的建议(在对该问题的评论中):在你做任何其他事情之前,先备份你所拥有的东西,就像现在一样。然后才继续执行任何清理操作。他建议获得交互式帮助也是明智的。

    在这种情况下,最重要的git命令是。reflog跟踪对每个特定分支头的所有更改,而
    git reflog
    命令列出了对分支头的所有时间更改

    如果您可以使用reflog识别一个“好的”提交id(它将在那里,在某个地方),那么您就远远领先于现在的位置。如果一个好的提交id是say,
    abc123
    ,那么命令:

    git checkout -b rescue abc123
    
    在提交id
    abc123
    处创建名为
    rescue
    的新分支


    当我学习git时,我有一个类似的“我到底在哪里,我是怎么来到这里的?”时刻。我在a上了解了reflog,这是了解Git最有价值的事情。

    Git最棒的事情之一是您可以轻松复制整个工作存储库。这允许您在尝试分支和合并时保留备份副本

    我建议的解决您当前问题的方法:

  • 创建整个存储库的备份副本
  • 尝试使用存储库的一次性副本
  • 每次你搞砸了一个废弃的存储库——扔掉它,从备份中重新开始
  • 最终,你将开始掌握回购协议黑客——你将恢复你的工作,你将对所学到的东西感觉良好
  • 另外,我希望您使用的是gitk(或类似工具)来查看更改的效果——它可以真正帮助您可视化不同的代码行以及它们之间的关系

    gitk --all ## show me all the branches
    

    恢复到旧备份对meGit总是有效的,这很好,而且您确实应该知道如何从命令行使用它。然而,当涉及到分支/合并/除了简单的提交和推送之外的几乎任何事情时,我更喜欢使用好的GUI。如果您使用的是windows,我强烈建议您使用“Git扩展”。奇怪的是,linux上没有一个很好的多功能一体解决方案,但是简单的老git gui和giggle帮我完成了这项工作。首先,现在对工作树和
    .git
    文件夹进行完整备份,并将其放在安全的地方,最好是只读的。从您所说的内容来看,您不太可能丢失了工作(没有
    reset--hard
    ,而且听起来您正在处理提交到分支上的事情)。一旦你做到了这一点,在某个地方的互动频道上找一位git专家,他可以告诉你如何搜索和恢复你以前的状态。stackoverflow几乎肯定不是f