如何将本地 Git 分支推送到远程的主分支(master branch)?

568

我在本地仓库有一个名为develop的分支,我希望在将其推送到origin时,能够与origin/master合并。目前,在我推送时,它只是添加到一个名为develop的远程分支中。

我应该如何做?


你不想将它合并到本地的origin,然后再推送到远程,有什么特别的原因吗? - bhamby
我认为@ galador的意思是将本地合并到'master'- 但这是一个有效的观点。 如果它足够稳定以供源主分支使用,那么肯定足够稳定以供您的主分支使用! - Cascabel
2
@Jefromi 假设您正在本地主分支上工作,并且进行了一些提交,但这些提交尚未准备好推送。然后发现您有紧急任务。您从远程主分支创建一个本地分支,进行工作并将更改推回主分支。也许这不是最好的方法,但这就是发生在我身上的事情,我就是这样做的。它顺利地按预期工作。嗯,我应该一开始就在单独的本地分支上工作,但是总是创建分支太麻烦,所以为时已晚。 - pinkeen
25
我正在将一个开发分支推送到Heroku上一个非公共测试应用中,以测试在Heroku环境下的运作情况。绝对不想将我的代码合并到'master'分支,但是Heroku只有在该应用程序的'master'分支上才会运行该代码。这是一个完全合理的请求,具有合法的使用情况! - JacobEvelyn
我遇到了一个我认为很好的理由来做这件事。我添加了一个名为“questions”的远程仓库,它与主项目不同。然后我只将某些文件添加到“questions”分支,并希望它们进入“questions”仓库的主分支。这是一个简单的方法来实现这个目标。 - max pleaner
显示剩余3条评论
7个回答

982
$ git push origin develop:master

或者更普遍地说

$ git push <remote> <local branch name>:<remote branch to push into>

33
不要执行 "git push origin :master",因为这会将你现有的分支从远程仓库中删除。 - Mangirdas Skripka
65
没错,@MangirdasSkripka!如果您不想指定当前分支的名称,只需使用git push origin head:master即可 :) - Francesc Rosas
28
好主意 @FrancescRosàs,不过需要用大写字母拼写 HEAD。 - smokku
13
我不知道mender权限是什么,或者你想要移动什么。 - mipadi
1
这个答案非常有帮助。在我的情况下,我是从本地主分支推送到远程非主分支。它运行得很好。然后我可以检出远程分支,使自己与一开始应该工作的位置同步,并从那里继续工作,没有问题。 - Speeddymon
显示剩余2条评论

248

正如评论中提到的,你可能不想这样做...如果你知道自己在做什么,那么 mipadi 给出的答案是完全正确的。

我的建议是:

git checkout master
git pull               # to update the state to the latest remote master state
git merge develop      # to bring changes to local master from your develop branch
git push origin master # push current HEAD to remote master branch

 


25
提一下,他的请求有一定道理,我正在利用这个情况将我的开发部署(推送)到Heroku主分支。 - Fabiano Soriani
5
在我看来,这种技术只适用于高级的Git用户。并不是说它太难,只是需要人们理解他们在做什么以及为什么它能起作用。每个人都可以自由使用Git,但我认为遵循我提出的方法对于教育目的来说更好,特别是对于Git新手来说。清晰的“主题分支”是开始的方式,如果需要,您以后可以优化您的工作流程。 - Eugene Sajine
2
这实际上是一件相当普遍的事情。主分支通常是您的部署分支。如果两个团队有意分开他们的部署,那么您很可能会使用一个挑选的本地分支来将补丁推送到上游。现在你可能会争辩说更改应该被推送到一个分支,然后从那里合并到主分支,但在我看来,这样做并不奇怪。 - dgatwood
1
+1 这是“构建”生产版本最合乎逻辑的方式。 - Ryan
如果你不想与develop合并,而是将develop的变更rebase到master分支上,该怎么做? - user239558
1
这似乎是最正确的答案:1)切换到主分支,2)拉取任何更改,3)在本地合并,最后4)如果您对结果满意,则将更改推送到主分支。 - Jared

1
git init
git add .
git commit -m "Add project to Bitbucket example"
git remote add source https://sample@bitbucket.org/sample/example.git
git push -u -f source master

1
你可以安装git工具,它可以帮助合并分支到主分支。我在RStudio中创建了一个分支,在其上进行了工作,并将更改推送到github。然后,当我想要合并时,我打开了这个git GUI工具,导航到我的存储库所在的文件夹,然后将分支合并到主分支。我打开RStudio检查更改是否已发生,然后从RStudio推送到github。

尽管大多数开发人员建议使用命令行执行 git 操作,但如果要解释基于 GUI 工具的操作,请添加一些截图以使流程更清晰。 - Deepak Yadav
请添加更多细节以扩展您的答案,例如工作代码或文档引用。 - Community
嗨@DeepakYadav,在安装了git GUI工具https://git-scm.com/downloads之后,点击“存储库”,并导航到您机器上的带有存储库的本地文件夹。在Git应用程序中加载此位置后,它将向您显示所有可用的分支。然后,单击“合并”,您可以选择是将主分支合并到分支还是反之。使用此GUI还有提交和推送选项,或者如果像我一样使用RStudio,则可以在检查更改后决定在RStudio中推送。 - Macdonald

1
让我们将这个自动化简化为一个简单的git推送。
示例:本地分支develop应该推送到origin/master。
1. 设置分支的远程(这可能已经完成了) ``` git branch --set-upstream-to origin ```
2. 设置远程的推送映射 ``` git config --local remote.origin.push develop:master ```

0

你也可以这样做,隐式地引用前一个分支:

git checkout mainline
git pull
git merge -
git push

-1
作为对@Eugene答案的补充,以下是另一个版本可用于将代码从本地repo推到主/开发分支。
切换到'master'分支:
$ git checkout master

将本地仓库合并到主分支:

$ git merge --no-ff FEATURE/<branch_Name>

推送到主分支:

$ git push

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