与主人合并开发分支

时间:2013-01-05 04:45:48

标签: git git-merge

我在GitHub存储库中有两个分支,即masterdevelopment。我正在开发分支中进行所有开发,如图所示。

git branch development
git add *
git commit -m "My initial commit message"
git push -u origin development

现在我想将development分支上的所有更改合并到master。我目前的做法是:

git checkout master 
git merge development
git push -u origin master 

如果我遵循的程序是正确的,请告诉我。

15 个答案:

答案 0 :(得分:955)

我通常希望先将master合并到development中,这样如果有任何冲突,我可以在development分支中自行解决,master仍然保持清洁

(on branch development)$ git merge master
(resolve any merge conflicts if there are any)
git checkout master
git merge development (there won't be any conflicts now)

这两种方法没有太大区别,但我注意到有时候我不想将分支合并到master中,在合并它们之后,或者还有更多的工作在这些可以合并之前完成,所以我倾向于保持master不变,直到最后的东西。

编辑:来自评论

如果要跟踪合并时间以及何时合并,可以在合并时使用--no-ff标记。这通常仅在将development合并到master(最后一步)时才有用,因为您可能需要在工作流程中多次将master合并到development(第一步) ,并为这些创建提交节点可能不是很有用。

git merge --no-ff development

答案 1 :(得分:81)

就我个人而言,我的方法与你的方法相似,只需要更多的分支,并且当他们回到主人的时候会有一些压缩。

我的一个同事不喜欢不得不多次切换分支并且在开发分支上保留类似于以下内容的所有内容都是从开发分支执行的。

git fetch origin master

git merge master

git push origin development:master

第一行确保自上次更新本地存储库以来,他已经进行了任何上游提交。

第二个将这些变化(如果有的话)从master转移到开发

第三个将开发分支(现在与master完全合并)推送到origin / master。

我的基本工作流程可能有些不对劲,但这是它的主要内容。

答案 2 :(得分:20)

从底部解释那些来到这里而不了解分支机构的人。

  

基本主分支开发逻辑是:您只在另一个分支上工作,仅使用master来合并另一个分支。

您开始以这种方式创建新分支:

1)在您的网络根目录中克隆需要的存储库:

$ cd /var/www
$ git clone git@bitbucket.org:user_name/repository_name.git

2)创建一个新分支。它将包含主分支存储库的最新文件

$ git branch new_branch

3)将git分支更改为new_branch

$ git checkout new_branch

4)编码,照常提交......

$ git add .
$ git commit -m “Initial commit”
$ git push (pushes commits only to “new_branch”)

5)当在该分支上完成作业时,与“master”分支合并:

$ git merge master
$ git checkout master (goes to master branch)
$ git merge development (merges files in localhost. Master shouldn’t have any  commits ahead, otherwise there will be a need for pull and merging code by hands!)
$ git push (pushes all “new_branch” commits to both branches - “master” and “new_branch”)

更新: 我强烈建议使用GitKraken来查看可视树的变化,并查看更好的逻辑和提交。

答案 3 :(得分:19)

如果您可以使用Git Flow工作流程,那就太棒了。它可以轻松地将开发分支合并为主。

您要做的只是按照此处提到的git flow说明进行操作:

http://danielkummer.github.io/git-flow-cheatsheet/

步骤进行:

  • 设置git flow项目
  • 创建分支并合并所有内容以进行开发
  • 运行命令“git flow release start”
  • 然后为发布提供有意义的消息
  • 运行命令“git flow release finish”
  • 它会将所有内容合并到master中,并将分支更改为master。
  • 运行命令“git push”将更改发布到远程主服务器。

查看以上链接以获取更多信息。

答案 4 :(得分:9)

是的,这是正确的,但它看起来像是一个非常基本的工作流程,您只需在它们准备好进行集成之前缓冲更改。你应该研究一下git支持的more advanced workflows。您可能希望topic branch方法可以并行处理多个功能,或graduation approach可以扩展当前工作流程。

答案 5 :(得分:7)

git pull(当前开发分支)

git checkout master

git pull

git merge development

git push origin master

答案 6 :(得分:5)

第1步

创建并切换到新的“dev”分支,其中本地git文件与远程同步,但“dev”分支尚不存在。

git branch dev # create
git checkout dev # switch
# No need to git add or git commit, the current
# branch's files will be cloned to the new branch by-default.
git push --set-upstream origin dev # push the "dev" branch to the remote.

第2步

对“dev”分支进行更改(如果您按照步骤1进行操作),提交并将其推送到远程“dev”分支。

git add .
git commit -S -m "my first commit to the dev branch" # remove the -S if you're not "secure", secure = when you already setup crypto private and public keys (i.e "verified" green sign in github)
git push -u origin dev # push the changes to the remote, -u origin dev is optional but good to use.

第3步

将“dev”分支合并为“master”。

git checkout dev # switch to "dev" branch if you're not already.
git merge master # optionally, this command is being used to resolve any conflicts if you pushed any changes to your "master" but "dev" doesn't have that commit.
git checkout master # switch to "master", which is the branch you want to be merged.
git merge --no-ff dev # merge the "dev" branch into the "master" one.

答案 7 :(得分:5)

如果您使用的是Mac或Ubuntu,请转到分支的工作文件夹。在终端

假设harisdev是branchname。

git checkout master

如果存在未跟踪或未提交的文件,则会出现错误,您必须提交或删除所有未跟踪或未提交的文件。

git merge harisdev 

git push origin master

删除分支的最后一个命令。

$ git branch -d harisdev

答案 8 :(得分:4)

这就是我通常这样做的方式。首先,确保您已准备好将更改合并到master中。

  1. 使用git fetch
  2. 检查远程服务器的最新更改,确定开发是否是最新的
  3. 完成提取后git checkout master
  4. 通过执行git pull
  5. 确保主分支具有最新更新
  6. 完成准备工作后,您可以使用git merge development
  7. 开始合并
  8. 使用git push -u origin master推送更改,您就完成了。
  9. 您可以在文章中找到有关git merging的更多信息。

答案 9 :(得分:3)

1)在分支开发上,使用以下命令检查git status:

substring(x, x)

应该没有未提交的代码。如果是,请在开发分支上推送您的代码:

git status

2)在开发分支上,运行以下两个命令:

git add *

git commit -m "My initial commit message"

git push origin Development

它会将您的开发分支代码推送到主分支。

答案 10 :(得分:2)

基于@Sailesh和@DavidCulp:

(on branch development)
$ git fetch origin master
$ git merge FETCH_HEAD
(resolve any merge conflicts if there are any)
$ git checkout master
$ git merge --no-ff development (there won't be any conflicts now)

第一个命令将确保您对远程主服务器进行了所有上游提交,而Sailesh响应不会发生。

第二个将执行合并并创建您可以解决的冲突。

执行此操作后,您最终可以结帐主人切换到主人。

然后将开发分支合并到本地主服务器上。 no-ff标志将在master中创建一个提交节点,以便整个合并可以跟踪。

之后,您可以提交并推送合并。

此过程将确保从开发到主人的合并提交,人们可以看到,然后如果他们去查看开发分支,他们可以看到您在开发过程中对该分支所做的各个提交。

或者,如果要添加开发分支中已完成内容的摘要,可以在推送之前修改合并提交。

编辑:我的原始答案提示git merge master没有做任何事情,最好在获取原点/主人后执行git merge FETCH_HEAD

答案 11 :(得分:1)

一旦您“签出”开发分支,您就可以...

 git add .
 git commit -m "first commit"
 git push origin dev
 git merge master

 git checkout master 
 git merge dev
 git push origin master 

答案 12 :(得分:0)

我认为最简单的解决方案是

    git checkout master
    git remote update
    git merge origin/Develop -X theirs
    git commit -m commit -m "New release"
    git push --recurse-submodules=check --progress "origin" refs/heads/Master

这还将保留所有正在使用的分支的历史记录

答案 13 :(得分:0)

如果使用的是gerrit,则以下命令可以正常工作。

git checkout master
git merge --no-ff development

您可以使用默认提交消息进行保存。确保已生成更改ID。您可以使用以下命令进行确认。

git commit --amend

然后使用以下命令进行推送。

git push origin HEAD:refs/for/refs/heads/master

您可能会遇到类似以下的错误消息。

! [remote rejected] HEAD -> refs/for/refs/heads/master (you are not allowed to upload merges)

要解决此问题,gerrit项目管理员必须在gerrit中创建另一个引用,名为“ refs / for / refs / heads / master”或“ refs / for / refs / heads / *”(将涵盖所有内容) 分支机构)。然后,向此引用授予“推送合并提交”权限,如果需要提交GCR,则授予“提交”权限。

现在,再次尝试使用上面的push命令,它应该可以工作。

积分:

https://github.com/ReviewAssistant/reviewassistant/wiki/Merging-branches-in-Gerrit

https://stackoverflow.com/a/21199818/3877642

答案 14 :(得分:-2)

1. //push the latest changes of current development branch if any        
git push (current development branch)

2. //switch to master branch
git checkout master 

3. //pull all the changes if any from (current development branch)
git pull origin (current development branch)

4. //Now merge development into master    
git merge development

5. //push the master branch
git push origin master

Error
To https://github.com/rajputankit22/todos-posts.git
 ! [rejected]        master -> master (fetch first)
error: failed to push some refs to 'https://github.com/rajputankit22/todos-posts.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Then Use 
5. //push the master branch forcefully
git push -f origin master