【问题标题】:Git workflow for merging remote ‘origin/develop’ into ‘origin/master’将远程“origin/develop”合并到“origin/master”的 Git 工作流程
【发布时间】:2013-03-24 16:32:01
【问题描述】:

“develop”和“master”的生命周期不受限制,在远程“master”领先于远程的情况下,将 GitHub 远程“origin/develop”分支合并和标记到远程“origin/master”的最佳工作流程是什么? “发展”?

更新文件(自述文件)和标记“主”的方案...

一切都同意...

$ git log develop ^master
$ git log master ^develop
$ git log master ^origin/master
$ git log master ^origin/develop
$ git log develop ^origin/develop
$ git log develop ^origin/master

切换到“开发”...

**$ git branch**
* develop
  master

编辑 README.md 文件。

提交到本地仓库...

**$ git commit -a**
[develop 47c8393] Updated branching model
 1 file changed, 18 insertions(+), 6 deletions(-)
 rewrite README.md (81%)

将“开发”推送到远程“开发”...

**$ git push origin develop**
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 745 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@github.com:xxx/xxx.git
   038cb2b..47c8393  develop -> develop

切换到“主”...

**$ git checkout master**
Switched to branch 'master'

将“开发”合并为“主”...

**$ git merge --no-ff develop**
Merge made by the 'recursive' strategy.
 README.md | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

标记“主人”...

**$ git tag -a v3.0.2**

将‘master’推送到远程‘master’...

**$ git push --tags origin master**
Counting objects: 2, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 442 bytes, done.
Total 2 (delta 0), reused 0 (delta 0)
To git@github.com:xxx/xxx.git
   038cb2b..5750fa7  master -> master
 * [new tag]         v3.0.2 -> v3.0.2

GitHub 现在报告远程“master”比远程“develop”(合并)提前 1。他们不应该同意吗?...

**$ git log origin/master ^origin/develop**
commit 5750fa78ff81f41ef2327c2f4595f98c0413e245
Merge: 038cb2b 47c8393
Author: 
Date:   

Merge branch 'develop'

如果将‘master’合并回‘develop’,HEAD指向‘develop’,这有问题吗?是否应该从新的“master”分支出一个新的“develop”(不支持“develop”的无限生命周期)?

【问题讨论】:

    标签: git merge git-remote


    【解决方案1】:

    在 git 中,合并/变基发生在本地,因此,如果您希望两个遥控器达成一致,您必须先让它们在本地达成一致。

    在 master 上执行命令 git merge --no-ff develop 会在 master 上创建一个新提交,其中包含 develop 上的所有提交。 master 上的新提交与 develop 上的任何提交都不相同,即使 develop 上只有一个提交也是如此。

    使用--no-ff 总是会创建一个新的提交,所以它总是会确保分支是不同的——如果你合并提交也是如此,不管如何。

    如果您想保持分支相同,请查看使用 git rebase 而不是 git merge 的工作流,例如 (A Rebase Workflow for Git)。

    【讨论】:

    • 感谢伟大的链接和思想大卫!如果我正在做分布式开发并共享远程仓库,我的印象是 rebase 可能不合适,链接似乎另有说明。您在那种环境中看到任何问题吗?
    • 我发现对变基有效的唯一问题是它可以用来重写公共历史。只要工作流不需要强制推送,这将改变公共提交历史,一切都会好起来的。我链接的工作流程在这方面是安全的。我会注意到其他人有不同的看法,关于是否最好使用git merge ...git rebase ... 有一个健康的争论——快速查询“git merge vs rebase”会给你两方面的读物如果您还有其他顾虑。
    • 我正在切换到您提供的链接中的变基工作流程(扑通扑通)!我会投票赞成你的答案,但我没有代表能够这样做!谢谢大卫!
    • 大卫,仍然对此感到困惑,所以我重新表述了这个问题...... [Git Workflow,Nvie 分支模型前后] (stackoverflow.com/questions/15641937/…)
    【解决方案2】:

    你应该合并 local 分支,并推出结果。即,将开发合并为大师。如果您不想弄乱本地分支,请为此创建分支,进行合并推回,然后将其删除。甚至为此创建一个克隆。

    【讨论】:

    • 在第一次推送'develop'之后,我相信我确实在本地合并(从本地'master' $ git merge --no-ff develop),然后标记并推送到远程($ git push --标签原产地主)。这导致远程主机领先于远程开发!?!?
    猜你喜欢
    • 2011-09-18
    • 1970-01-01
    • 2020-07-27
    • 2021-02-05
    • 2011-02-22
    • 2012-01-31
    • 1970-01-01
    • 2012-05-22
    相关资源
    最近更新 更多