git merge

时间:2017-09-11 21:52:50

标签: git version-control merge

我有两个分支,A)开发和B)功能

我在B上工作,现在准备好将B合并到A.显然已经完成了很多工作,很多其他功能分支合并在via pull请求中。我拉出A的最新头并且出于测试目的,让我说我将A合并到B(注意,我在两个方向上都有相同的行为,但是我试图找出问题出在哪里)。

我将A合并到B中,但在解决合并冲突后我遇到了很多编译器错误。我注意到实际上A中包含的代码只是没有将它转移到B.这导致构建失败,并且有很多东西丢失(它至少有一个大的提交代码)。

我追踪了我遇到问题的提交,并且#34;合并"从A到B.并不是说它没有合并,我确实在输入" git log"合并后B签出时。由于某种原因,与提交相关的实际更改才会消失。关于相关代码没有合并冲突,我确信在处理B时我从未触及过该部分,因此可能发生其他任何事情。

关于"缺失"提交(即使我在分支日志中看到它),我应该做些什么来恢复实际的更改?我会使用差异工具,但我担心这是一个更大问题的症状,而且我不知道的其他代码也可能丢失。

我对git很新,所以我有点不确定如何处理这个问题。如果有任何其他可能有用的信息,请告诉我。

到目前为止我尝试过的事情:

将A合并到B中,提交就在那里,但提交的代码却没有 将B合并到A,相同的代码/提交相同的问题

我已经尝试过变种,但许多冲突中的许多提交都让分支机构失效了。所有提交也在服务器上,所以从我所读到的这可能是一个坏主意。如果我应该尝试在某个方向(A-> B或B-> A)进行变基,请告诉我。

2 个答案:

答案 0 :(得分:2)

<强>解决方案

如果它只是一个缺失的提交,你可以通过在B分支上发出 cherry-pick 命令轻松地将它应用到A分支:

git cherry-pick commit_name

此命令采用特定提交(按名称)并将其作为新提交应用于当前分支。只需检查日志中的提交名称并将其粘贴为参数。

以下是有关该命令的更多信息: https://git-scm.com/docs/git-cherry-pick

有关可能原因的更多信息

至于问题本身。你遇到这种情况可能有很多原因,其中一些可能是微不足道的,有些则不是。我说GIT最有可能看到差异,但由于某种原因得出结论,他们不应该被应用(在自动合并过程中)。您必须检查B分支的历史记录,它是如何以及何时(关于此A提交)创建的,并且它具有该特定提交的任何历史记录。

无论如何,如果来自该提交的更改实际上不存在于B代码中,那么一个挑选应该可以帮助您解决这个问题,因为它将使用新的提交名称应用这些更改,从而避免任何问题。

答案 1 :(得分:2)

一个原因可能是您之前将A合并到B并以您提交错过的方式处理冲突。

develop 分开很长时间的

功能分支很难合并回 develop (B - &gt; A)。为了防止这种情况,可以在一段时间之后将 develop 合并到 feature (A - > B)以处理到目前为止两个分支之间的冲突。在这种情况下,当您稍后合并A和B(在任何方向上)时,git剂量不再提及处理的冲突。

要检查这一点,请使用&#34; git log&#34;在最终合并之前的B上,如果你看到丢失的提交,则意味着它已经合并到了B。