目前 git 正在努力,我无法为以下问题提出最佳解决方案。
有两个分支,一个叫master,一个叫mobiledevicesupport。我想将 mobiledevicesupport 保持为一个连续的分支,只要 mobiledevicesupport 稳定,它将与主分支合并/同步。这会将 mobiledevicesupport 的更改合并到 master 中,但也会将 master 的所有更改带入 mobiledevicesupport,以便可以继续处理分支并改进或修改功能。这需要与中央存储库和多个开发人员一起工作。
请举一个其他人使用的类似工作流程的示例,或者告诉我这个想法是否愚蠢,我应该考虑其他选择。目前工作流程似乎很合理,但我只是不知道如何让 git 以这种方式工作。
谢谢,非常感谢所有帮助。
更新 1:如果我要将 master 合并到 mobiledevicesupport 并将 mobiledevice 支持合并到 master,我是否会在两个分支中获得复制提交。或者 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
rebase
与 merge
的两难境地;请参阅此处进行比较:perforce.com/blog/vcs/git-rebase-vs-merge-which-better
是的,只需这样做:
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 中。
每当您想将更改从 master 转移到您的工作分支时,请执行 git rebase <remote>/master
。如果有任何冲突。解决它们。
当您的工作分支准备就绪时,再次变基,然后执行 git push <remote> HEAD:master
。这将更新远程(中央仓库)上的主分支。
git branch --contains <commit>
的输出。
concept47 的方法是正确的方法,但我建议与 --no-ff 选项合并,以保持您的提交历史清晰。
git checkout develop
git pull --rebase
git checkout NewFeatureBranch
git merge --no-ff master
--no-ff
的更多信息和图形:stackoverflow.com/questions/9069061/…
通过 git merge 接受的答案将完成工作,但会留下混乱的提交历史,正确的方法应该是通过以下步骤“变基”(假设您希望在 PR 之前进行最终推送之前使您的功能分支与开发保持同步)。
1 git fetch
来自您的功能分支(确保您正在处理的功能分支是最新的)
2 git rebase origin/develop
3 如有冲突,一一解决
处理完所有冲突后使用 git rebase --continue
5 git push --force
git push --force-with-lease
而不是 git push --force
是的,我同意你的做法。要将 mobiledevicesupport 合并到 master 中,您可以使用
git checkout master
git pull origin master //Get all latest commits of master branch
git merge mobiledevicesupport
同样,您也可以在 mobiledevicesupport 中合并 master。
问:交叉合并是否存在问题。
A. 这取决于上次同步时在 mobile* 分支和 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.
现在,有两种类型的合并可能
快进合并真正的合并(需要手动操作)
Git 将首先尝试进行 FF 合并,如果发现任何冲突都无法由 git 解决。它使合并失败并要求您合并。在这种情况下,将发生一个新的提交,负责解决 a.txt 中的冲突。
所以底线是交叉合并不是问题,最终你必须这样做,这就是同步的意思。在生产中做任何事情之前,确保你在合并分支时弄脏了你的手。
运行以下命令:
$ git checkout mobiledevice
$ git pull origin master
这会将所有最新提交合并到您的分支。如果合并导致一些冲突,您需要修复它们。
我不知道这是否是最佳做法,但对我有用。
您正在朝着正确的方向思考。不断合并master与mobiledevicesupport,当mobiledevicesupport稳定时将mobiledevicesupport与master合并。每个开发人员都有自己的分支,并且可以根据他们的角色在 master 或 mobiledevicesupport 上进行合并。
using yourBranch = mobiledevicesupport;
使 yourBranch 与 master
保持同步包括两个重要细节:
根据master更新云端yourBranch版本 根据master更新PC上yourBranch版本
如何:
假设 yourBranch 落后于 master
创建从 master 到 yourBranch 的合并请求(例如通过 GitLab Web UI)接受/解决从 master 到 yourBranch 的合并请求(例如通过 GitLab Web UI)
现在您的分支中的 master 有了更改
这已在远程(在云中)将主更改加载到 yourBranch,但尚未在本地加载
更新您在本地(在您的 PC 上)拥有的旧版本 yourBranch
确保您现在正在本地与您的分支进行交互
git fetch 将检查更改
git status 将告诉您本地存储库(本地 yourBranch 的)的状态 - 例如 master 后面的 5 次提交
git pull 将从云端(从“远程”)下载新的更新版本,其中添加了来自 master 的更改 - 现在您也将在本地存储库中与 master 同步(在您的机器上)
不定期副业成功案例分享
git pull origin master
即可完成相同的操作