2016-11-29 81 views
0

我不是混蛋高手所以原谅我,如果我到一些可怕的错误。的Git是从每个人的一个分支的所有变化,就好像我自己的变化

我在一个团队项目,我已经创建了从分支X一个新的分支Z(这是我们的发展分支),使我改变它,它已经在我的本地分支为一个星期左右。与此同时,我们的团队决定切换到一种方法,并使用新的分支Y作为开发分支。从那以后,其他人(以及我,在其他任务中)的每一次提交都被分派到Y.今天,我想将分支Z中的更改合并到新的开发分支Y.我已经将总共约15个文件总共。然而,当我尝试合并分支时,git(我们在Visual Studio Online上,如果它有什么区别),我在13个文件(包括一些我甚至没有碰过我的整个生活的文件)上遇到了合并冲突。我在Visual Studio中说“中止”。去分支Y,与它同步(如果需要的话,它会提取,拉取和按顺序),返回到我的分支Z,合并更改并尝试再次同步。它说我是最新的。我已经打开拉入请求合并ž到Y和这里是麻烦:

的Git认为所有提交/被大家在球队的最后一周做我的变化而变化。该拉取请求包括字面上由已经在分支Y上的其他人完成的数百个更改。我怎样才能使我的Pull请求只包含我在分支中的更改,为什么Git甚至试图将更改合并到Y上已有的更改上,并将它们显示为它们全部是我的更改(当它不是时) ?

+0

您是否有单独提交的要在Y合并的更改? – Deep

+1

有关您将Y合并到Z中的方式将新的差异/补丁引入提交历史记录。最好的办法是(1)将预先合并的Z重新整合到Y上,然后在那里打开一个新的PR,或者(2)创建一个新的主题分支并挑选出所有相关的补丁。 – Pockets

+0

@Deep不幸的是。 –

回答

1

我想在合并XZ,然后试图将其合并到Y有什么问题或提到您的git的历史Pockets打破。我没有的为什么发生这种情况,但我跟随在这种情况下,创建从主分支一个新的分支和cherry-pick将提交确切的答案:

git checkout Y 
git fetch origin && git pull origin Y 
git checkout -b new_X 
git cherry-pick commit_hash 

如果你有多次提交然后cherry-pick的提交按照顺序的方式,比如挑选首先承诺的承诺等等。

您也有一个选项,rebase分支,但有时垫底的原因有很多的冲突,如果做错了或在这些类型的案件。这只是我个人经历的冲突,而重新启动我并不是说它会一直到来,所以在这种情况下,我更喜欢cherry-pick而不是rebase

+0

我会选择樱桃(尽管它不是一个单独的提交,这只是我可以选择的一小部分)。但是,我想了解这个问题背后的真正原因,以便从长远来看避免它。 –

1

有一件重要的事情,您必须确定是否存在名为Z的分支,它存在于远程(可能由您推送或由其他人创建)。

如果分支中的Z远程存储库中存在,它有沉重的几率是其他人修改分支Z.因此,它不仅包含更改您从远程拉后。所以你必须找到你提交的那些提交历史。有两种方法可以重播你的分支的Z改变分支Y如下(我们可以使用图表来说明):

   I---J Y 
      /  
A---B---C---H   X (development) 
    \ 
     D---E---F---G Z 
  1. 找出你所做出的改变。假设在分支Z上,提交D到F由您创建,因此您可以使用git checkout Zgit reset --hard HEAD~,因此HEAD将指向分支Z上的F.

可以重播的变化直接分支Y,使用git rebase --onto Y <commit id for B> Z,结果将是:

   I---J---D’---E’---F’ Y 
      /  
A---B---C---H       X (development) 
  • 为了不打扰别人的变化,你也可以创建新分支并在其上复制您的更改。使用这些命令:
  • git checkout Z

    git checkout <commit id for F>

    git checkout -b newZ

    ,然后你可以create a pull request to merge branch newZ into branch Y,本次合并对您的更改。

    如果Z分支肯定只存在于您本地的仓库中,那么这些文件实际上是由Y分支中的其他开发人员修改的。比如文件test.cs在Z分支中没有被修改,但其他开发者在Y分支中修改了它。将Z合并到Y时,test.cs文件将显示冲突。

    +0

    nope,Z不存在远程。我为它创建了一个独特的名称,它来自于我正在处理的任务,我100%确定(并确认)没有分支具有相同的名称。 –

    +0

    @CanPoyrazoğlu。正如你确信的那样,所以你没有任何隐患可以继续合并。你找到一些你没有修改但出现在合并冲突中的文件是由其他开发者在Y分支中修改这些文件引起的。我在回答中添加了这种情况,如果真的有帮助,请将其标记为答案。 –

    +0

    我确定没有人修改过400个文件。 MONTHS的任何人都没有触及过“更改过”的文件。 –

    相关问题