如何保持分支与主同步/更新?

目前git正在做我的头,我不能提出以下最好的解决方案。

有两个分支,一个叫,一个叫mobiledevicesupport。我想保持mobiledevicesupport作为一个连续的分支,当mobiledevicesupport稳定时,它将与主分支合并/同步。这将合并从mobiledevicesuport到master的更改,但也将所有从master到mobiledevicesuport的更改,以便分支可以继续工作,并改进或修改功能。这需要与中央存储库和多个开发人员一起工作。

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

谢谢,非常感谢所有的帮助。

< p >更新1: 如果我将master合并到mobiledevicesupt中,并将mobiledevicesupport合并到master中,我是否会在两个分支之间复制提交?或者git是否足够聪明,可以计算出我已经将最新的更改从分支A拉到分支B,并将合并提交C添加到分支B。我已经将最新的更改从分支B拉到分支A,并将合并提交D添加到分支A?< / p >

我打算张贴一个图像,但我没有足够的声誉,所以我猜下面的插图将不得不做。两个分支不断地运行,并经常向两个方向进行合并。我不确定的关键是git将如何执行提交,它将在合并时填充来自另一个分支的提交,还是保持干净。我以前用过rebase,但它似乎结束了分支,把所有的提交到主,或者我做错了。谢谢你到目前为止的帮助。

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

你想的方向是对的。不断合并master和mobiledevicesupport,并在mobiledevicesupport稳定时合并master。每个开发人员都有自己的分支,可以根据自己的角色与主设备或移动设备支持进行合并。

是的,我同意你的方法。要合并移动设备支持到master,您可以使用

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

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

问:交叉合并是否有问题?

< p >。好吧,这取决于移动*分支和主分支上一次同步时的提交。举个例子: 在最后一次同步之后,以下提交发生在这些分支

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. 真正的合并(需要手动操作)

Git将首先尝试使FF合并,如果它发现任何冲突都不能由Git解决。它失败的合并,并要求您合并。在这种情况下,将发生一个新的提交,负责解决a.txt中的冲突。

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

是的,只要做:

git checkout master
git pull
git checkout mobiledevicesupport
git merge master

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

然后,当你准备好把mobiledevicsupport放到master中,首先,像上面那样合并在master中,然后:

git checkout master
git merge mobiledevicesupport
git push origin master

就是这样。

这里假设mobilexxx是一个主题分支,其中的工作还没有准备好进入您的主分支。所以只有在mobiledevicessupportionenabled好的时候才合并到master。

无论何时你想要将master的更改放到你的work分支中,执行git rebase <remote>/master。如果有任何冲突。解决这些冲突。

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

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

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

通过git合并可以完成工作,但会留下一个混乱的提交历史,正确的方法应该是通过以下步骤“rebase”(假设你想在做PR前的最后推送之前保持你的功能分支与开发同步)。

1 git fetch从你的功能分支(确保你正在工作的功能分支是更新到最新的)

2 git rebase origin/develop

如有冲突,应逐一解决

一旦所有冲突处理完毕,就使用git rebase --continue

5 git push --force

执行如下命令:

$ git checkout mobiledevice
$ git pull origin master

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

我不知道这是否是最好的做法,但对我来说是有效的。

using yourBranch = mobiledevicesupport;

保持yourBranchmaster同步包含两个重要细节:

  1. 根据master更新云中yourBranch版本
  2. 根据master更新你PC上的yourBranch版本

如何:

假设yourBranchmaster后面

  1. 创建一个从masteryourBranch的合并请求(例如via GitLab web UI)
  2. 接受/解决从masteryourBranch的合并请求(例如: 通过GitLab web UI)
  • 现在你有了masteryourBranch中的变化
  • 这已经在远程(云中)加载了master更改到yourBranch,但还没有在本地加载
  1. 更新你在本地拥有的yourBranch的旧版本 你的电脑)李< / >
  • 确保您现在正在与您的分支进行本地交互
  • git fetch将检查更改
  • git status将告诉你本地存储库(本地yourBranch)的状态——例如在master之后提交5次
  • git pull将从云(从"remote")下载新的更新版本,其中添加了master中的更改-现在你将在本地存储库中与master同步(在你的机器上)