如何让git分支与master保持同步

时间:2013-05-02 03:15:18

标签: git

目前git正在努力,我无法想出以下最佳解决方案。

有两个分支,一个名为 master ,另一个名为 mobiledevicesupport 。我希望将mobiledevicesupport保持为一个连续的分支,只要mobiledevicesupport稳定,它就会与主分支合并/同步。这会将来自mobiledevicesupport的更改合并到master中,但也会将master中的所有更改带入mobiledevicesupport,以便继续处理分支并更改或修改功能。这需要与中央存储库和多个开发人员合作。

请举例说明其他人使用的类似工作流程,或者只是告诉我这个想法是否愚蠢,我应该考虑其他选择。目前工作流程看似合理,但我不知道如何让git以这种方式工作。

谢谢,非常感谢。

更新1: 如果我要将master与mobiledevicesupport和mobiledevice support合并到master中,我是否会在两个分支中获得复制提交。或者git足够聪明,我已经将分支A中的最新更改提取到分支B并将合并提交C添加到分支B.并且我已将分支B中的最新更改提取到分支A并将合并提交D添加到分支?A

我打算发布一张图片,但我没有足够的声誉,所以我猜想下面的图片必须要做。两个分支连续运行,经常合并两个方向。我不确定的关键是git将如何完成提交,并且它将在合并时从其他分支的提交填充任一分支,或者它将保持干净。我之前使用过rebase但它似乎结束了分支并将所有提交放入master中,或者我做错了。感谢您的帮助。

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

7 个答案:

答案 0 :(得分:348)

是的,只做

git checkout master
git pull
git checkout mobiledevicesupport
git merge master

让mobiledevicesupport与master

保持同步

然后当你准备把mobiledevicesupport放到master中时,先在master中合并,然后......,

git checkout master
git merge mobiledevicesupport
git push origin master

就是这样。

这里的假设是mobilexxx是一个主题分支,其工作还没有准备好进入你的主分支。因此,当mobiledevicesupport处于一个好位置时,只能合并到master中

答案 1 :(得分:40)

每当您想要从master进行更改到工作分支时,请执行git rebase <remote>/master。如果有任何冲突。解决它们。

当您的工作分支准备好后,再次进行rebase,然后执行git push <remote> HEAD:master。这将更新远程(中央仓库)的主分支。

答案 2 :(得分:9)

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

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

答案 3 :(得分:8)

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

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

同样,您也可以在mobiledevicesupport中合并master。

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

一个。那么它取决于上次同步时在mobile * branch和master分支中提交的提交。举个例子: 在上次同步之后,以下提交发生在这些分支

之后
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.

现在,有两种类型的合并可能

  1. 快进合并
  2. 真正合并(需要手动操作)
  3. Git将首先尝试进行FF合并,如果发现任何冲突都无法通过git解析。它无法合并并要求您合并。在这种情况下,将发生新的提交,负责解决a.txt中的冲突。

    所以底线是交叉合并不是问题,最终你必须这样做,这就是同步意味着什么。在生产任何东西之前,一定要弄脏你的双手。

答案 4 :(得分:2)

你正在思考正确的方向。在mobiledevicesupport稳定的情况下,将master与mobiledevicesupport连续合并,并将mobiledevicesupport与master合并。每个开发人员都有自己的分支,可以根据他们的角色在master或mobiledevicesupport上进行合并。

答案 5 :(得分:1)

运行以下命令:

$ git checkout mobiledevice
$ git pull origin master 

这会将所有最新提交合并到您的分支中。如果合并导致一些冲突,则需要解决它们。

我不知道这是否是最佳实践,但对我有用。

答案 6 :(得分:-1)

通过git merge接受的答案将完成工作,但留下一个混乱的提交hisotry,正确的方法应该是&#39; rebase&#39;通过以下步骤(假设您希望在PR之前进行最终推送之前将您的功能分支保留在sycn中)。

来自您的功能分支的

1 git fetch(确保您正在处理的功能分支已更新到日期)

2 git rebase origin/develop

3如果发生任何冲突,请逐一解决

一旦处理完所有冲突,

4使用git rebase --continue

5 git push --force