如何保持git分支与主同步

目前git正在进入我的脑海,我无法为以下提出最好的解决scheme。

有两个分支,一个叫做master ,另一个叫mobiledevicesupport 。 我想保持移动设备支持作为一个连续的分支,只要mobiledevicesupport稳定,它将与主分支合并/同步。 这会将移动设备支持的更改合并到主设备中,而且还会将主设备的所有更改合并到移动设备支持中,以便分支可以继续进行工作并对function进行改进或修改。 这需要与中央存储库和多个开发人员一起工作。

请使用其他人使用的类似工作stream程的示例,或者只是告诉我这个想法是否愚蠢,我应该考虑其他选项。 目前工作stream程看起来很合理,但我不知道如何让Git以这种方式工作。

谢谢,都非常感谢。

更新1:如果我要合并master到mobiledevicesupport和mobiledevice支持到主,我是否获得跨两个分支复制提交。 或者是足够聪明的git工作,我已经把最新的变化从分支机构A到分支机构B并添加合并提交C到分支机构B.我已经从分支机构B的最新变化分支A,并添加合并提交D分支一个?

我打算张贴一张图片,但我没有足够的声望,所以我想下面的插图将不得不做。 两个分支不断合并,往往双向合并。 我不确定的关键是git将如何提交提交,并将它填入任一分支与来自另一分支的提交合并或将保持干净。 我之前使用过rebase,但似乎结束了分支并把所有提交到master,或者我做错了。 感谢你目前的帮助。

master A--B--C-----H--I--J--M--N \ / \ mobile \ / \ D--E--F--G--------K--L 

是的,只是做

 git checkout master git pull git checkout mobiledevicesupport git merge master 

保持移动设备支持与主同步

那么当你准备好将移动设备支持放入主设备的时候,首先像上面那样在主设备上合并,然后…

 git checkout master git merge mobiledevicesupport git push origin master 

这就是它。

这里的假设是,mobilexxx是一个主题分支,但还没有准备好进入主分支。 所以只有在移动设备支持处于良好状态时才能融入主设备

每当你想从主人到你的工作分支的变化,做一个git rebase <remote>/master 。 如果有任何冲突。 解决它们。

当你的工作分支准备好了,重新绑定,然后做git push <remote> HEAD:master 。 这将更新远程(中央回购)的主分支。

concept47的方法是正确的做法,但我build议与–no-ff选项合并,以保持您的提交历史清晰。

 git checkout develop git pull --rebase git checkout NewFeatureBranch git merge --no-ff master 

是的,我同意你的方法。 要将mobiledevicesupport合并到master中,您可以使用

 git checkout master git pull origin master //Get all latest commits of master branch git merge mobiledevicesupport 

同样,你也可以合并masterdevice的支持。

问:如果交叉合并是一个问题。

答:这取决于移动分支和主分支从最后一次同步所做的提交。 以这个例子:上次同步后,发生这些分支的提交

 Master branch: A -> B -> C [where A,B,C are commits] Mobile branch: D -> E 

现在,假设提交B对文件a.txt进行了一些更改,提交D也对a.txt做了一些更改。 让我们来看看现在每个合并操作的影响,

 git checkout master //Switches to master branch git pull // Get the commits you don't have. May be your fellow workers have made them. git merge mobiledevicesupport // It will try to add D and E in master branch. 

现在,有两种types的合并可能

  1. 快进合并
  2. 真正的合并(需要手动)

Git会首先尝试使FF合并,如果发现任何冲突都不能通过git解决。 它没有合并,并要求你合并。 在这种情况下,会发生一个新的提交,它负责解决a.txt中的冲突。

所以底线是交叉合并不是一个问题,最终你必须这样做,这就是同步的意思。 在做任何事情之前,确保你在合并分支时弄脏你的手。

你正在朝着正确的方向思考。 在移动设备支持稳定的情况下,不断将主设备与移动设备支持合并,并将移动设备支持与主设备进行合并。 每个开发人员都有自己的分支,可以根据主angular或移动设备支持,根据angular色进行合并。

通过git merge接受的答案将完成工作,但留下了一个凌乱的提交hisotry,正确的方法应该是“rebase”通过以下步骤(假设你想保持你的function分支sycn开发之前,你最后推PR )。

 1>'git fetch' from your feature branch (make sure the feature branch you are working on is update to date) 2>'git rebase origin/develop' 3>if any conflict shall arise, resolve them one by one 4>'use git rebase --continue' once all conflicts are dealt with 5>'git push --force'