GIT将主合并到一个分支


49

我一直在新分支上开发新功能,并且在一侧上对我的master分支做出了许多更改。

是否可以将master分支合并到我的新分支中以使其保持最新状态,以便新功能完成后不会出现太多合并冲突?


您尝试过git-merge吗?在这里帮忙。
karatedog 2010年

Answers:


56

您可以git merge master或者git rebase master,在这种情况下,我宁愿git的重订

因为这git rebase使得功能分支上的更改好像是在主分支上的更改之上进行的,这使得版本图更加简单。

变基

采取例如从GIT中底垫手册git rebase master在分支feature

      A---B---C feature                             A'--B'--C' feature
     /                   --rebase-->               /
D---E---F---G master                  D---E---F---G master

但是,git rebase仅当分支尚未分布时才适用,否则下游会造成混乱和额外的工作,因为旧的提交A,B,C现在被新的提交A',B',C'和F代替。和G以前没有的

git rebase masterin分支之后的实际结果feature是:

      ( A---B---C )
       /
      /       A'--B'--C' feature
     /       /
D---E---F---G master

提交A,B,C在重新设置基准后悬空,但可通过到达git reflog feature

合并

如果有人拉了您的分支,或者您已将其推到某个位置,则应该合并到该分支中,以免造成混乱和另一端的额外工作。请参阅从上游变基恢复

这是git merge masterin分支的结果feature

      A---B---C feature                    A---B---C---M feature
     /                   --merge-->       /       ,---’
D---E---F---G master                 D---E---F---G master

另外,如果您git merge feature在branch中master,它将如下所示:

      A---B---C feature                    A---B---C feature
     /                   --merge-->       /         \
D---E---F---G master                 D---E---F---G---M master

您应该解释为什么您更喜欢重新定基以及有什么区别。变基会创建线性历史记录-这可能不适合该问题。
安德烈亚斯·雷姆

好吧,如果我理解得很好:如果newfeature还没有完成,我必须检出master分支,如果完成了,则需要重新设置基础?
mnml 2010年

否,在签出功能分支的情况下,请执行do git rebase master,它将“重新设置”功能分支中的更改,从而使它们“基于”主分支中的更改。如果master分支中的更改与feature分支中的更改冲突,则git会要求您解决它们并继续,跳过它们或中止。如果不确定,可以签出测试分支以进行尝试git checkout -b test-feature feature(假设您的功能分支命名为“功能”)。
ChristofferHammarström,2010年

2
您是什么意思“看不到我的分支了”?无论如何,git rebase仅应在尚未分发分支的情况下使用,因为您说这是一个新分支,所以我以为是这种情况,对此感到抱歉。请参阅我链接到的文档中的从上游基准恢复。您将不得不使用git mergegit reflog如果您想找回以前的功能分支头,可以使用它。
ChristofferHammarström,2010年

1
我从未见过关于合并和变基之间区别的更清晰的解释。谢谢。
Paulo Pedroso
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.