将Git分支推广为主分支

6
我有一个包含主分支(master),开发分支(development)和几个特性分支的 Git 仓库(以及 Github)。每个特性分支都是从 development 分支创建,之后被合并回 development
现在我想要 “提升” development 分支到 master 分支。我不想把这两个分支合并,因为可能会产生冲突。基本上,development 分支已经 “生产就绪”,我希望 master 分支反映出 development 目前的状态。我该如何操作呢?

你想对“master”的历史记录做什么? - SLaks
开发是否也从主分支分离出来了(通常是这样,但您可能有不同的设置)?如果是这样,您想如何处理它们共同祖先之后的提交? - Ma3x
可能是重复的问题:https://dev59.com/PnE85IYBdhLWcg3wejVO - vsnyc
我想覆盖(也许扩展是正确的词)master的历史记录。这个想法是所有工作都在development上完成,并且定期将development提升到master - Paymahn Moghadasian
2个回答

5
换句话说,develop成为了您的新主要版本。最简单的方法是将developer分支合并到主分支(master)中:
 git push origin origin/development:master

如果从当前主分支开始进行开发,这将起作用。如果不是这样,并且您不想保留主分支的历史记录,您可以强制推送:
git push -f origin/development:master 

强制推送的问题可能会出现在主分支上有其他工作(分支)派生的情况下。在这种情况下,最安全的方法是执行技术合并,如先前提到的线程中所述。

我在使用团队基础架构服务器时遇到了同样的问题。我想将子分支升级为主干分支,同时不丢失两个分支的历史记录。在TFS中有解决这个问题的方法吗? - Sachith Wickramaarachchi
@Sachith TFS与git无关。为您创建一个新的专用问题可能是个好主意。 - Mykola Gurov

5

我认为在将develop声明为生产就绪状态时最好有一个合并提交,以便您可以回滚。

虽然使用普通的git命令完全可以实现这一点,但我有一个脚本来完成所有步骤:https://gist.github.com/soulrebel/9c47ee936cfce9dcb725

实际上,这是推广命令所做的事情:

git pull --ff-only         # check we are up to date on our branch
git checkout master        # go the target branch
git pull --ff-only         # check updates there too
git merge develop --no-ff  # merge with a commit
git push                   # push the merge
git checkout develop       # back to develop

请更详细地描述脚本的功能;否则,这将是一个仅包含链接的答案,对stackoverflow来说是不好的。 - Dima Tisnek
展示如何在不使用脚本的情况下完成此操作。 - Holloway
@AndreaRatto 我在团队基础服务器上遇到了同样的问题。我想将子分支升级为主干分支,同时不丢失两个分支的历史记录。在TFS中是否有解决此问题的解决方法? - Sachith Wickramaarachchi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接