修复错误合并后的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
,但这似乎也没有起到任何作用
如何修复存储库并合并所有分支?错误:
在你决定玩之前,把你的代码扔到别的地方,这样当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
在提交idabc123
处创建名为rescue
的新分支
当我学习git时,我有一个类似的“我到底在哪里,我是怎么来到这里的?”时刻。我在a上了解了reflog,这是了解Git最有价值的事情。Git最棒的事情之一是您可以轻松复制整个工作存储库。这允许您在尝试分支和合并时保留备份副本 我建议的解决您当前问题的方法:
gitk --all ## show me all the branches
恢复到旧备份对meGit总是有效的,这很好,而且您确实应该知道如何从命令行使用它。然而,当涉及到分支/合并/除了简单的提交和推送之外的几乎任何事情时,我更喜欢使用好的GUI。如果您使用的是windows,我强烈建议您使用“Git扩展”。奇怪的是,linux上没有一个很好的多功能一体解决方案,但是简单的老git gui和giggle帮我完成了这项工作。首先,现在对工作树和
.git
文件夹进行完整备份,并将其放在安全的地方,最好是只读的。从您所说的内容来看,您不太可能丢失了工作(没有reset--hard
,而且听起来您正在处理提交到分支上的事情)。一旦你做到了这一点,在某个地方的互动频道上找一位git专家,他可以告诉你如何搜索和恢复你以前的状态。stackoverflow几乎肯定不是f